diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index ebeb0d31018..6b702a2104d 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -255,8 +255,8 @@ OpenLayers.Layer = OpenLayers.Class({ * APIProperty: maxResolution * {Float} Default max is 360 deg / 256 px, which corresponds to * zoom level 0 on gmaps. Specify a different value in the layer - * options if you are not using a geographic projection and - * displaying the whole world. + * options if you are not using the default + * and displaying the whole world. */ maxResolution: null, @@ -638,12 +638,6 @@ OpenLayers.Layer = OpenLayers.Class({ this.units || this.map.units; this.initResolutions(); - if (!this.resolutions) { - throw( - "Could not calculate resolutions for layer " + this.name + - ". Configure maxResolution or resolutions or scales." - ); - } if (!this.isBaseLayer) { this.inRange = this.calculateInRange(); @@ -896,6 +890,16 @@ OpenLayers.Layer = OpenLayers.Class({ props.resolutions = this.resolutionsFromScales(props.scales); } if(props.resolutions == null) { + var maxExtent = this.maxExtent; + if (!props.maxResolution && maxExtent) { + // maxResolution for default grid sets assumes that at zoom + // level zero, the whole world fits on one tile. + var tileSize = this.tileSize || this.map.getTileSize(); + props.maxResolution = Math.max( + maxExtent.getWidth() / tileSize.w, + maxExtent.getHeight() / tileSize.h + ); + } props.resolutions = this.calculateResolutions(props); } } diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index cae77fe7221..24ecd23a1a4 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -274,8 +274,8 @@ OpenLayers.Map = OpenLayers.Class({ /** * APIProperty: maxResolution - * {Float} Specify if you are not using a geographic projection or Web - * Mercator and displaying the whole world. + * {Float} Required if you are not displaying the whole world on a tile + * with the size specified in . */ maxResolution: null, diff --git a/lib/OpenLayers/Projection.js b/lib/OpenLayers/Projection.js index 21f4ad2ec26..47b1dcabaae 100644 --- a/lib/OpenLayers/Projection.js +++ b/lib/OpenLayers/Projection.js @@ -167,26 +167,22 @@ OpenLayers.Projection.transforms = {}; * {Object} Defaults for the SRS codes known to OpenLayers (currently * EPSG:4326, CRS:84, urn:ogc:def:crs:EPSG:6.6:4326, EPSG:900913, EPSG:3857, * EPSG:102113 and EPSG:102100). Keys are the SRS code, values are units, - * maxExtent (the validity extent for the SRS), maxResolution (the maximum - * resolution commonly used in grid sets for this SRS) and yx (true if this - * SRS is known to have a reverse axis order). + * maxExtent (the validity extent for the SRS) and yx (true if this SRS is + * known to have a reverse axis order). */ OpenLayers.Projection.defaults = { "EPSG:4326": { units: "degrees", maxExtent: [-180, -90, 180, 90], - maxResolution: 1.40625, yx: true }, "CRS:84": { units: "degrees", - maxExtent: [-180, -90, 180, 90], - maxResolution: 1.40625 + maxExtent: [-180, -90, 180, 90] }, "EPSG:900913": { units: "m", - maxExtent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34], - maxResolution: 156543.03390625 + maxExtent: [-20037508.34, -20037508.34, 20037508.34, 20037508.34] } }; diff --git a/tests/Layer/WMS.html b/tests/Layer/WMS.html index 1459a26e1ce..c83103faa73 100644 --- a/tests/Layer/WMS.html +++ b/tests/Layer/WMS.html @@ -388,6 +388,7 @@ var map = new OpenLayers.Map({ div: "map", maxExtent: new OpenLayers.Bounds(-185, -95, 185, 95), + maxResolution: 1.40625, layers: [dummy, unconstrained, constrained], center: new OpenLayers.LonLat(0, 0), zoom: 1 diff --git a/tests/Layer/WMTS.html b/tests/Layer/WMTS.html index e2b64f26044..e8d7a235f1d 100644 --- a/tests/Layer/WMTS.html +++ b/tests/Layer/WMTS.html @@ -136,7 +136,8 @@ layer: "world", style: "blue_marble", matrixSet: "arcgis_online", - tileSize: new OpenLayers.Size(512, 512), + tileSize: new OpenLayers.Size(512, 512), + maxResolution: 1.40625, requestEncoding: "REST" }); map.addLayer(layer1); @@ -156,7 +157,8 @@ layer: "world", style: "blue_marble", matrixSet: "arcgis_online", - tileSize: new OpenLayers.Size(512, 512), + tileSize: new OpenLayers.Size(512, 512), + maxResolution: 1.40625, requestEncoding: "REST" }); map.addLayer(layer1); diff --git a/tests/Layer/XYZ.html b/tests/Layer/XYZ.html index 98836106a3f..bd6d26ea45c 100644 --- a/tests/Layer/XYZ.html +++ b/tests/Layer/XYZ.html @@ -195,7 +195,7 @@ var map = new OpenLayers.Map({ div: "map", - maxResolution: OpenLayers.Projection.defaults["EPSG:4326"].maxResolution / Math.pow(2, offset) + maxResolution: 1.40625 / Math.pow(2, offset) }); var layer = new OpenLayers.Layer.XYZ(name, url, {zoomOffset: offset}); map.addLayer(layer); @@ -211,7 +211,7 @@ var map = new OpenLayers.Map({ div: "map", - maxResolution: OpenLayers.Projection.defaults["EPSG:4326"].maxResolution / Math.pow(2, offset) + maxResolution: 1.40625 / Math.pow(2, offset) }); var layer = new OpenLayers.Layer.XYZ(name, url, {zoomOffset: offset}); map.addLayer(layer);