From 137a69b17a5ed894b1abcbe4dd9357bc3593360c Mon Sep 17 00:00:00 2001 From: euzuro Date: Wed, 3 Oct 2007 19:21:05 +0000 Subject: [PATCH] Change to getZoomForResolution() (and those who call it) so that it does not choose the closest fit by default. Doing so was causing us problems, because user would drag a zoom box and then the map's new zoom would not contain said zoombox. Not good. Default is back to how it was before, but now there's an option 'closest' for those times when what we really want is the closest. Right now, the only time that's true is when we're switching baselayers. This is based on the work from sandbox/euzuro/zoomToResolution, which is started by reverting r4318. (Closes #1043) git-svn-id: http://svn.openlayers.org/trunk/openlayers@4792 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf --- lib/OpenLayers/Layer.js | 50 +++++++++++++++++++---------- lib/OpenLayers/Map.js | 23 +++++++++---- tests/Control/test_OverviewMap.html | 22 +++---------- tests/Layer/test_Grid.html | 22 +++---------- tests/Layer/test_KaMap.html | 22 +++---------- tests/Layer/test_TMS.html | 21 +++--------- tests/Layer/test_TileCache.html | 20 ++---------- tests/Layer/test_WrapDateLine.html | 18 +++++------ tests/test_Layer.html | 10 ++++-- 9 files changed, 86 insertions(+), 122 deletions(-) diff --git a/lib/OpenLayers/Layer.js b/lib/OpenLayers/Layer.js index 9ec06d611f..1348e6f0d8 100644 --- a/lib/OpenLayers/Layer.js +++ b/lib/OpenLayers/Layer.js @@ -730,19 +730,24 @@ OpenLayers.Layer = OpenLayers.Class({ * * Parameters: * bounds - {} + * closest - {Boolean} Find the zoom level that most closely fits the + * specified bounds. Note that this may result in a zoom that does + * not exactly contain the entire extent. + * Default is false. * * Returns: * {Integer} The index of the zoomLevel (entry in the resolutions array) - * that still contains the passed-in extent. We do this by calculating - * the ideal resolution for the given exteng (based on the map size) - * and then find the closest resolution to this ideal resolution. + * for the passed-in extent. We do this by calculating the ideal + * resolution for the given extent (based on the map size) and then + * calling getZoomForResolution(), passing along the 'closest' + * parameter. */ - getZoomForExtent: function(extent) { + getZoomForExtent: function(extent, closest) { var viewSize = this.map.getSize(); var idealResolution = Math.max( extent.getWidth() / viewSize.w, extent.getHeight() / viewSize.h ); - return this.getZoomForResolution(idealResolution); + return this.getZoomForResolution(idealResolution, closest); }, /** @@ -759,28 +764,39 @@ OpenLayers.Layer = OpenLayers.Class({ /** * APIMethod: getZoomForResolution - * Get the index for the closest resolution in the layers resolutions array. * * Parameters: - * resolution - {Float} Map units per pixel. + * resolution - {Float} + * closest - {Boolean} Find the zoom level that corresponds to the absolute + * closest resolution, which may result in a zoom whose corresponding + * resolution is actually smaller than we would have desired (if this + * is being called from a getZoomForExtent() call, then this means that + * the returned zoom index might not actually contain the entire + * extent specified... but it'll be close). + * Default is false. * * Returns: * {Integer} The index of the zoomLevel (entry in the resolutions array) - * that is the closest to the passed-in resolution. + * that corresponds to the best fit resolution given the passed in + * value and the 'closest' specification. */ - getZoomForResolution: function(resolution) { - var zoom, diff; + getZoomForResolution: function(resolution, closest) { + var diff; var minDiff = Number.POSITIVE_INFINITY; - for(var i=0; i < this.resolutions.length; i++) { - diff = Math.abs(this.resolutions[i] - resolution); - if(diff < minDiff) { - zoom = i; + for(var i=0; i < this.resolutions.length; i++) { + if (closest) { + diff = Math.abs(this.resolutions[i] - resolution); + if (diff > minDiff) { + break; + } minDiff = diff; - } else if(diff > minDiff) { - break; + } else { + if (this.resolutions[i] < resolution) { + break; + } } } - return zoom; + return Math.max(0, i-1); }, /** diff --git a/lib/OpenLayers/Map.js b/lib/OpenLayers/Map.js index 21c6707077..bd799f484a 100644 --- a/lib/OpenLayers/Map.js +++ b/lib/OpenLayers/Map.js @@ -711,13 +711,13 @@ OpenLayers.Map = OpenLayers.Class({ // simply set center but force zoom change this.setCenter( center, - this.getZoomForResolution(this.resolution), + this.getZoomForResolution(this.resolution, true), false, true ); } else { // zoom to oldExtent *and* force zoom change this.setCenter(oldExtent.getCenterLonLat(), - this.getZoomForExtent(oldExtent), + this.getZoomForExtent(oldExtent, true), false, true); } } @@ -1367,15 +1367,19 @@ OpenLayers.Map = OpenLayers.Class({ * * Parameters: * bounds - {} + * closest - {Boolean} Find the zoom level that most closely fits the + * specified bounds. Note that this may result in a zoom that does + * not exactly contain the entire extent. + * Default is false. * * Returns: * {Integer} A suitable zoom level for the specified bounds. * If no baselayer is set, returns null. */ - getZoomForExtent: function (bounds) { + getZoomForExtent: function (bounds, closest) { var zoom = null; if (this.baseLayer != null) { - zoom = this.baseLayer.getZoomForExtent(bounds); + zoom = this.baseLayer.getZoomForExtent(bounds, closest); } return zoom; }, @@ -1385,15 +1389,22 @@ OpenLayers.Map = OpenLayers.Class({ * * Parameter: * resolution - {Float} + * closest - {Boolean} Find the zoom level that corresponds to the absolute + * closest resolution, which may result in a zoom whose corresponding + * resolution is actually smaller than we would have desired (if this + * is being called from a getZoomForExtent() call, then this means that + * the returned zoom index might not actually contain the entire + * extent specified... but it'll be close). + * Default is false. * * Returns: * {Integer} A suitable zoom level for the specified resolution. * If no baselayer is set, returns null. */ - getZoomForResolution: function(resolution) { + getZoomForResolution: function(resolution, closest) { var zoom = null; if (this.baseLayer != null) { - zoom = this.baseLayer.getZoomForResolution(resolution); + zoom = this.baseLayer.getZoomForResolution(resolution, closest); } return zoom; }, diff --git a/tests/Control/test_OverviewMap.html b/tests/Control/test_OverviewMap.html index 911272757e..92cd01bb94 100644 --- a/tests/Control/test_OverviewMap.html +++ b/tests/Control/test_OverviewMap.html @@ -43,33 +43,21 @@ var overviewZoom = control.ovmap.getZoom(); t.eq(overviewCenter.lon, -71, "Overviewmap center lon correct"); t.eq(overviewCenter.lat, 42, "Overviewmap center lat correct"); - t.eq(overviewZoom, 9, "Overviewmap zoomcorrect"); + t.eq(overviewZoom, 8, "Overviewmap zoomcorrect"); control.mapDivClick({'xy':new OpenLayers.Pixel(5,5)}); - // There are box model issues that keep browsers from giving us - // identical results here. Test the normalized difference against - // a tolerance instead of testing equality. - function normalizedDiff(a, b) { - return Math.abs((a - b) / (a + b)); - } - var tolerance = 1e-4; - var cent = map.getCenter(); - t.ok(normalizedDiff(cent.lon, -71.00390625) < tolerance, - "Clicking on the Overview Map has the correct effect on map lon"); - t.ok(normalizedDiff(cent.lat, 42.00390625) < tolerance, - "Clicking on the Overview Map has the correct effect on map lat"); + t.eq(cent.lon, -71.3515625, "Clicking on the Overview Map has the correct effect on map lon"); + t.eq(cent.lat, 42.17578125, "Clicking on the Overview Map has the correct effect on map lat"); control.rectMouseDown({'xy':new OpenLayers.Pixel(5,5), 'which':1}); control.rectMouseMove({'xy':new OpenLayers.Pixel(15,15), 'which':1}); control.rectMouseUp({'xy':new OpenLayers.Pixel(15,15), 'which':1}); var cent = map.getCenter(); - t.ok(normalizedDiff(cent.lon, -70.83984375) < tolerance, - "Dragging on the Overview Map has the correct effect on map lon"); - t.ok(normalizedDiff(cent.lat, 41.84765625) < tolerance, - "Dragging on the Overview Map has the correct effect on map lat"); + t.eq(cent.lon, -71.2734375, "Dragging on the Overview Map has the correct effect on map lon"); + t.eq(cent.lat, 42.09765625, "Dragging on the Overview Map has the correct effect on map lat"); map.setCenter(new OpenLayers.LonLat(0,0), 0); var overviewCenter = control.ovmap.getCenter(); diff --git a/tests/Layer/test_Grid.html b/tests/Layer/test_Grid.html index c4164bf4be..11acc54a95 100644 --- a/tests/Layer/test_Grid.html +++ b/tests/Layer/test_Grid.html @@ -150,26 +150,12 @@ bounds = new OpenLayers.Bounds(10,10,12,12); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 2 map units / 500px = 0.004 - * layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125, - * 0.087890625, 0.0439453125, 0.02197265625, - * 0.010986328125, 0.0054931640625, 0.00274658203125, - * 0.001373291015625, 0.0006866455078125, 0.00034332275390625, - * 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125] - * - * So, we expect a zoom of 9 because it is the closest resolution. - */ - t.eq( zoom, 9, "getZoomForExtent() returns correct value"); + t.eq( zoom, 8, "getZoomForExtent() returns correct value"); bounds = new OpenLayers.Bounds(10,10,100,100); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 90 map units / 500px = 0.18 - * So, we expect a zoom of 3 because it is the closest. - */ - t.eq( zoom, 3, "getZoomForExtent() returns correct value"); + t.eq( zoom, 2, "getZoomForExtent() returns correct value"); } function test_07_Layer_Grid_moveTo(t) { @@ -555,10 +541,10 @@ map.zoomToMaxExtent(); map.zoomIn(); var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200)); - t.eq(bounds.toBBOX(), "-90,0,0,90", "get tile bounds returns correct bounds"); + t.eq(bounds.toBBOX(), "-180,-90,0,90", "get tile bounds returns correct bounds"); map.pan(200,0); var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200)); - t.eq(bounds.toBBOX(), "0,0,90,90", "get tile bounds returns correct bounds after pan"); + t.eq(bounds.toBBOX(), "0,-90,180,90", "get tile bounds returns correct bounds after pan"); } function test_Layer_Grid_moveTo_buffer_calculation (t) { diff --git a/tests/Layer/test_KaMap.html b/tests/Layer/test_KaMap.html index 54c82c6fed..a79bd7d50a 100644 --- a/tests/Layer/test_KaMap.html +++ b/tests/Layer/test_KaMap.html @@ -128,26 +128,12 @@ bounds = new OpenLayers.Bounds(10,10,12,12); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 2 map units / 500px = 0.004 - * layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125, - * 0.087890625, 0.0439453125, 0.02197265625, - * 0.010986328125, 0.0054931640625, 0.00274658203125, - * 0.001373291015625, 0.0006866455078125, 0.00034332275390625, - * 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125] - * - * So, we expect a zoom of 9 because it is the closest resolution. - */ - t.eq( zoom, 9, "getZoomForExtent() returns correct value"); + t.eq( zoom, 8, "getZoomForExtent() returns correct value"); bounds = new OpenLayers.Bounds(10,10,100,100); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 90 map units / 500px = 0.18 - * So, we expect a zoom of 3 because it is the closest. - */ - t.eq( zoom, 3, "getZoomForExtent() returns correct value"); + t.eq( zoom, 2, "getZoomForExtent() returns correct value"); } function test_06_Layer_kaMap_mergeNewParams (t) { @@ -250,10 +236,10 @@ map.zoomToMaxExtent(); map.zoomIn(); var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200)); - t.eq(bounds.toBBOX(), "-90,0,0,90", "get tile bounds returns correct bounds"); + t.eq(bounds.toBBOX(), "-180,0,0,180", "get tile bounds returns correct bounds"); map.pan(200,0); var bounds = layer.getTileBounds(new OpenLayers.Pixel(200,200)); - t.eq(bounds.toBBOX(), "0,0,90,90", "get tile bounds returns correct bounds after pan"); + t.eq(bounds.toBBOX(), "0,0,180,180", "get tile bounds returns correct bounds after pan"); } function test_99_Layer_KaMap_destroy (t) { diff --git a/tests/Layer/test_TMS.html b/tests/Layer/test_TMS.html index 9fb5629d5b..cc8c04811b 100644 --- a/tests/Layer/test_TMS.html +++ b/tests/Layer/test_TMS.html @@ -77,26 +77,13 @@ bounds = new OpenLayers.Bounds(10,10,12,12); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 2 map units / 500px = 0.004 - * layer.resolutions = [1.40625, 0.703125, 0.3515625, 0.17578125, - * 0.087890625, 0.0439453125, 0.02197265625, - * 0.010986328125, 0.0054931640625, 0.00274658203125, - * 0.001373291015625, 0.0006866455078125, 0.00034332275390625, - * 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125] - * - * So, we expect a zoom of 9 because it is the closest resolution. - */ - - t.eq( zoom, 9, "getZoomForExtent() returns correct value"); + + t.eq( zoom, 8, "getZoomForExtent() returns correct value"); bounds = new OpenLayers.Bounds(10,10,100,100); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 90 map units / 500px = 0.18 - * So, we expect a zoom of 3 because it is the closest. - */ - t.eq( zoom, 3, "getZoomForExtent() returns correct value"); + + t.eq( zoom, 2, "getZoomForExtent() returns correct value"); } diff --git a/tests/Layer/test_TileCache.html b/tests/Layer/test_TileCache.html index 78bae8d4cb..db3a6a7438 100644 --- a/tests/Layer/test_TileCache.html +++ b/tests/Layer/test_TileCache.html @@ -78,27 +78,13 @@ bounds = new OpenLayers.Bounds(10,10,12,12); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 2 map units / 500px = 0.004 - * layer.resolutions = [0.703125, 0.3515625, 0.17578125, - * 0.087890625, 0.0439453125, 0.02197265625, - * 0.010986328125, 0.0054931640625, 0.00274658203125, - * 0.001373291015625, 0.0006866455078125, 0.00034332275390625, - * 0.000171661376953125, 0.0000858306884765625, 0.00004291534423828125, - * 0.000021457672119140625] - * - * So, we expect a zoom of 8 because it is the closest resolution. - */ - t.eq( zoom, 8, "getZoomForExtent() returns correct value"); + + t.eq( zoom, 7, "getZoomForExtent() returns correct value"); bounds = new OpenLayers.Bounds(10,10,100,100); zoom = layer.getZoomForExtent(bounds); - /** - * ideal resolution: 90 map units / 500px = 0.18 - * So, we expect a zoom of 2 because it is the closest. - */ - t.eq( zoom, 2, "getZoomForExtent() returns correct value"); + t.eq( zoom, 1, "getZoomForExtent() returns correct value"); } diff --git a/tests/Layer/test_WrapDateLine.html b/tests/Layer/test_WrapDateLine.html index cad289f4c5..3490322c1d 100644 --- a/tests/Layer/test_WrapDateLine.html +++ b/tests/Layer/test_WrapDateLine.html @@ -131,9 +131,9 @@ var m = new OpenLayers.Map('map'); m.addLayer(layer); m.zoomToMaxExtent(); - t.eq(layer.grid[3][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C0%2C90%2C90&WIDTH=256&HEIGHT=256", "cell [3][0] is wrapped around the world."); - t.eq(layer.grid[0][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C270%2C90%2C360&WIDTH=256&HEIGHT=256", "cell [0][0] is wrapped around the world lon, but not lat"); - t.eq(layer.grid[0][3].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90%2C270%2C0%2C360&WIDTH=256&HEIGHT=256", "cell [3][0] is not wrapped at all."); + t.eq(layer.grid[3][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "cell [3][0] is wrapped around the world."); + t.eq(layer.grid[0][0].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "cell [0][0] is wrapped around the world lon, but not lat"); + t.eq(layer.grid[0][3].url, "http://octo.metacarta.com/cgi-bin/mapserv?MAP=%2Fmapdata%2Fvmap_wms.map&LAYERS=basic&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "cell [3][0] is not wrapped at all."); } function test_Layer_WrapDateLine_KaMap (t) { @@ -146,9 +146,9 @@ var m = new OpenLayers.Map('map'); m.addLayer(layer); m.zoomToMaxExtent(); - t.eq(layer.grid[0][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=0&s=110735960.625", "grid[0][0] kamap is okay"); - t.eq(layer.grid[0][3].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=-256&s=110735960.625", "grid[0][3] kamap is okay"); - t.eq(layer.grid[3][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-512&l=0&s=110735960.625", "grid[3][0] is okay"); + t.eq(layer.grid[0][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=0&s=221471921.25", "grid[0][0] kamap is okay"); + t.eq(layer.grid[0][3].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-1280&l=-256&s=221471921.25", "grid[0][3] kamap is okay"); + t.eq(layer.grid[3][0].url, "http://www.openlayers.org/world/index.php?g=satellite&map=world&i=jpeg&t=-512&l=0&s=221471921.25", "grid[3][0] is okay"); } function test_Layer_WrapDateLine_WMS_Overlay (t) { t.plan( 3 ); @@ -163,9 +163,9 @@ var m = new OpenLayers.Map('map'); m.addLayers([baselayer,layer]); m.zoomToMaxExtent(); - t.eq(layer.grid[0][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C270%2C90%2C360&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay"); - t.eq(layer.grid[0][3].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-90%2C270%2C0%2C360&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay"); - t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C0%2C90%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay"); + t.eq(layer.grid[0][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C450%2C180%2C630&WIDTH=256&HEIGHT=256", "grid[0][0] wms overlay is okay"); + t.eq(layer.grid[0][3].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=-180%2C450%2C0%2C630&WIDTH=256&HEIGHT=256", "grid[0][3] wms overlay is okay"); + t.eq(layer.grid[3][0].url, "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?LAYERS=bathymetry%2Cland_fn%2Cpark%2Cdrain_fn%2Cdrainage%2Cprov_bound%2Cfedlimit%2Crail%2Croad%2Cpopplace&TRANSPARENT=true&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A4326&BBOX=0%2C-90%2C180%2C90&WIDTH=256&HEIGHT=256", "grid[3][0] wms overlay okay"); } diff --git a/tests/test_Layer.html b/tests/test_Layer.html index c1715ec161..3f54c72e80 100644 --- a/tests/test_Layer.html +++ b/tests/test_Layer.html @@ -158,7 +158,7 @@ function test_06_Layer_getZoomForResolution(t) { - t.plan(6); + t.plan(8); var layer = new OpenLayers.Layer('Test Layer'); @@ -166,12 +166,16 @@ layer.resolutions = [128, 64, 32, 16, 8, 4, 2]; t.eq(layer.getZoomForResolution(200), 0, "zoom all the way out"); - t.eq(layer.getZoomForResolution(65), 1, "index closest to 65"); - t.eq(layer.getZoomForResolution(63), 1, "index closest to 63"); t.eq(layer.getZoomForResolution(25), 2, "zoom in middle"); t.eq(layer.getZoomForResolution(3), 5, "zoom allmost all the way in"); t.eq(layer.getZoomForResolution(1), 6, "zoom all the way in"); + t.eq(layer.getZoomForResolution(65), 0, "smallest containing res"); + t.eq(layer.getZoomForResolution(63), 1, "smallest containing res"); + + t.eq(layer.getZoomForResolution(65, true), 1, "closest res"); + t.eq(layer.getZoomForResolution(63, true), 1, "closest res"); + } function test_07_Layer_redraw(t) {