diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index bf19b13077..85834f51b0 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -1576,7 +1576,13 @@ OpenLayers.Map = OpenLayers.Class({ moveTo: function(lonlat, zoom, options) { if (!options) { options = {}; - } + } + if (zoom != null) { + zoom = parseFloat(zoom); + if (!this.fractionalZoom) { + zoom = Math.round(zoom); + } + } // dragging is false by default var dragging = options.dragging; // forceZoomChange is false by default @@ -1658,7 +1664,7 @@ OpenLayers.Map = OpenLayers.Class({ } if (zoomChanged) { - this.zoom = parseInt(zoom); + this.zoom = zoom; this.resolution = this.getResolutionForZoom(zoom); // zoom level has changed, increment viewRequestID. this.viewRequestID++; diff --git a/tests/Map.html b/tests/Map.html index 487deed50e..4aef14b2c3 100644 --- a/tests/Map.html +++ b/tests/Map.html @@ -1053,6 +1053,46 @@ map.destroy(); } + function test_zoomTo(t) { + t.plan(8); + + var map = new OpenLayers.Map("map"); + map.addLayer(new OpenLayers.Layer(null, { + isBaseLayer: true + })); + + map.zoomToMaxExtent(); + + map.zoomTo(2); + t.eq(map.getZoom(), 2, 'zoomTo(2)'); + + map.zoomTo(3.6); + t.eq(map.getZoom(), 4, 'zoomTo(3.6)'); + + map.zoomTo("4.6"); + t.eq(map.getZoom(), 5, 'zoomTo("4.6")'); + + map.zoomTo("1.2"); + t.eq(map.getZoom(), 1, 'zoomTo("1.2")'); + + // now allow fractional zoom + map.fractionalZoom = true; + + map.zoomTo(2); + t.eq(map.getZoom(), 2, '[fractionalZoom] zoomTo(2)'); + + map.zoomTo(3.6); + t.eq(map.getZoom(), 3.6, '[fractionalZoom] zoomTo(3.6)'); + + map.zoomTo("4.6"); + t.eq(map.getZoom(), 4.6, '[fractionalZoom] zoomTo("4.6")'); + + map.zoomTo("1.2"); + t.eq(map.getZoom(), 1.2, '[fractionalZoom] zoomTo("1.2")'); + + map.destroy(); + } + function test_Map_getUnits(t) { t.plan(2); var map = new OpenLayers.Map("map");