diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 3da2d762b8..46724c7e34 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -723,6 +723,18 @@ OpenLayers.Layer = OpenLayers.Class({ return this.getZoomForResolution(idealResolution); }, + /** + * Method: getDataExtent + * Calculates the max extent which includes all of the data for the layer. + * This function is to be implemented by subclasses. + * + * Returns: + * {} + */ + getDataExtent: function () { + //to be implemented by subclasses + }, + /** * APIMethod: getZoomForResolution * diff --git a/lib/OpenLayers/Layer/Markers.js b/lib/OpenLayers/Layer/Markers.js index a13592aa87..c5c891271e 100644 --- a/lib/OpenLayers/Layer/Markers.js +++ b/lib/OpenLayers/Layer/Markers.js @@ -139,6 +139,27 @@ OpenLayers.Layer.Markers = OpenLayers.Class(OpenLayers.Layer, { } } }, + + /** + * APIMethod: getDataExtent + * Calculates the max extent which includes all of the markers. + * + * Returns: + * {} + */ + getDataExtent: function () { + var maxExtent = null; + + if ( this.markers && (this.markers.length > 0)) { + var maxExtent = new OpenLayers.Bounds(); + for(var i=0; i < this.markers.length; i++) { + var marker = this.markers[i]; + maxExtent.extend(marker.lonlat); + } + } + + return maxExtent; + }, CLASS_NAME: "OpenLayers.Layer.Markers" }); diff --git a/tests/Layer/test_Markers.html b/tests/Layer/test_Markers.html index 7330b1ea8f..c39d5c7b24 100644 --- a/tests/Layer/test_Markers.html +++ b/tests/Layer/test_Markers.html @@ -49,6 +49,34 @@ layer.destroy(); t.eq( layer.map, null, "layer.map is null after destroy" ); } + + function test_03_Layer_Markers_getDataExtent(t) { + t.plan( 4 ); + + var layer = {}; + var ret = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(layer, []); + t.eq(ret, null, "does not crash, returns null on layer with null 'this.markers'"); + + layer.markers = []; + ret = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(layer, []); + t.eq(ret, null, "returns null on layer with empty 'this.markers'"); + + layer.markers.push({ + 'lonlat': new OpenLayers.LonLat(4,5) + }); + var expectedBounds = new OpenLayers.Bounds(4,5,4,5); + ret = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(layer, []); + t.ok(ret.equals(expectedBounds), "returns expected bounds with only one marker"); + + layer.markers.push({ + 'lonlat': new OpenLayers.LonLat(1,2) + }); + var expectedBounds = new OpenLayers.Bounds(1,2,4,5); + ret = OpenLayers.Layer.Markers.prototype.getDataExtent.apply(layer, []); + t.ok(ret.equals(expectedBounds), "returns expected bounds with multiple markers"); + + } + // -->