diff --git a/lib/OpenLayers/Layer/FixedZoomLevels.js b/lib/OpenLayers/Layer/FixedZoomLevels.js index 1c1dda8402..571398a827 100644 --- a/lib/OpenLayers/Layer/FixedZoomLevels.js +++ b/lib/OpenLayers/Layer/FixedZoomLevels.js @@ -287,6 +287,11 @@ OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({ var zoom = null; if (moZoom != null) { zoom = moZoom - this.minZoomLevel; + if (this.map.baseLayer !== this) { + zoom = this.map.baseLayer.getZoomForResolution( + this.getResolutionForZoom(zoom) + ) + } } return zoom; }, @@ -306,6 +311,11 @@ OpenLayers.Layer.FixedZoomLevels = OpenLayers.Class({ var zoom = null; if (olZoom != null) { zoom = olZoom + this.minZoomLevel; + if (this.map.baseLayer !== this) { + zoom = this.getZoomForResolution( + this.map.baseLayer.getResolutionForZoom(zoom) + ); + } } return zoom; }, diff --git a/tests/Layer/FixedZoomLevels.html b/tests/Layer/FixedZoomLevels.html index 581b445da3..133571bcb8 100644 --- a/tests/Layer/FixedZoomLevels.html +++ b/tests/Layer/FixedZoomLevels.html @@ -82,6 +82,34 @@ t.eq( layer.resolutions[i], resolutions[i + minZoomLevel], "resolutions array at index " + i + " ok"); } } + + function test_getMapObjectZoomFromOLZoom(t) { + t.plan(4); + + var map = new OpenLayers.Map("map", {allOverlays: true}); + var xyz = new OpenLayers.Layer.XYZ("xyz", "${x}${y}${z}", { + sphericalMercator: true, + resolutions: [39135.7584765625, 19567.87923828125, 9783.939619140625] + }); + var fixed = new (OpenLayers.Class(OpenLayers.Layer, OpenLayers.Layer.FixedZoomLevels, { + initialize: function() { + OpenLayers.Layer.prototype.initialize.apply(this, arguments); + } + }))("fixed", { + resolutions: [156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, 9783.939619140625], + minZoomLevel: 1 + }); + map.addLayers([xyz, fixed]); + map.setCenter(new OpenLayers.LonLat(0, 0), 2); + // map.getZoom() returns 2 + t.eq(fixed.getMapObjectZoomFromOLZoom(map.getZoom()), 4, "correct return value from getMapObjectZoomFromOLZoom"); + t.eq(fixed.getOLZoomFromMapObjectZoom(4), map.getZoom() - fixed.minZoomLevel, "correct return value from getOLZoomFromMapObjectZoom"); + + map.setBaseLayer(fixed); + // map.getZoom() returns 4 now + t.eq(fixed.getMapObjectZoomFromOLZoom(map.getZoom()), 5, "correct return value from getMapObjectZoomFromOLZoom"); + t.eq(fixed.getOLZoomFromMapObjectZoom(5), map.getZoom(), "correct return value from getOLZoomFromMapObjectZoom"); + } function p_createLayer(layer, mapOptions, layerOptions) { @@ -104,6 +132,6 @@
- +