diff --git a/src/ol/layer/layergroup.js b/src/ol/layer/layergroup.js index 86dc1042f5..dcb420fc5f 100644 --- a/src/ol/layer/layergroup.js +++ b/src/ol/layer/layergroup.js @@ -214,9 +214,13 @@ ol.layer.Group.prototype.getLayerStatesArray = function(opt_states) { layerState.maxResolution, ownLayerState.maxResolution); layerState.minResolution = Math.max( layerState.minResolution, ownLayerState.minResolution); - if (goog.isDef(ownLayerState.extent) && goog.isDef(layerState.extent)) { - layerState.extent = ol.extent.getIntersection( - layerState.extent, ownLayerState.extent); + if (goog.isDef(ownLayerState.extent)) { + if (goog.isDef(layerState.extent)) { + layerState.extent = ol.extent.getIntersection( + layerState.extent, ownLayerState.extent); + } else { + layerState.extent = ownLayerState.extent; + } } } diff --git a/test/spec/ol/layer/layergroup.test.js b/test/spec/ol/layer/layergroup.test.js index b9c6918842..3430969c33 100644 --- a/test/spec/ol/layer/layergroup.test.js +++ b/test/spec/ol/layer/layergroup.test.js @@ -382,6 +382,12 @@ describe('ol.layer.Group', function() { maxResolution: 500, minResolution: 0.25 }); + var layer3 = new ol.layer.Layer({ + source: new ol.source.Source({ + projection: 'EPSG:4326' + }), + extent: [-5, -2, 5, 2] + }); it('does not transform layerStates by default', function() { var layerGroup = new ol.layer.Group({ @@ -405,6 +411,29 @@ describe('ol.layer.Group', function() { goog.dispose(layerGroup); }); + it('uses the layer group extent if layer has no extent', function() { + var groupExtent = [-10, -5, 10, 5]; + var layerGroup = new ol.layer.Group({ + extent: groupExtent, + layers: [layer1] + }); + var layerStatesArray = layerGroup.getLayerStatesArray(); + expect(layerStatesArray[0].extent).to.eql(groupExtent); + goog.dispose(layerGroup); + }); + + it('uses the intersection of group and child extent', function() { + var groupExtent = [-10, -5, 10, 5]; + var layerGroup = new ol.layer.Group({ + extent: groupExtent, + layers: [layer3] + }); + var layerStatesArray = layerGroup.getLayerStatesArray(); + expect(layerStatesArray[0].extent).to.eql( + ol.extent.getIntersection(layer3.getExtent(), groupExtent)); + goog.dispose(layerGroup); + }); + it('transforms layerStates correctly', function() { var layerGroup = new ol.layer.Group({ layers: [layer1, layer2], @@ -451,6 +480,7 @@ describe('ol.layer.Group', function() { goog.dispose(layer1); goog.dispose(layer2); + goog.dispose(layer3); }); @@ -460,6 +490,7 @@ goog.require('goog.dispose'); goog.require('goog.events.EventType'); goog.require('goog.object'); goog.require('ol.ObjectEventType'); +goog.require('ol.extent'); goog.require('ol.layer.Layer'); goog.require('ol.layer.Group'); goog.require('ol.source.Source');