Attached patch fixes a problem I was seeing where layers were being
disabled on the highest (most zoomed-in) zoom level when inheriting
their resolutions from the map.

For map options:
{ maxExtent: new
OpenLayers.Bounds(-20000000,-20000000,20000000,20000000),
maxResolution: 10000, minResolution: 0.15, numZoomLevels: 16, units:
"m", projection: new OpenLayers.Projection("EPSG:900913"), tileSize:
new OpenLayers.Size(384, 384), controls: ([]) }

I was getting per-layer resolutions arrays like:

0: 14.111103491115225
1: 10.423086192640271
2: 7.698953228400015
3: 5.686787935702212
4: 4.200513506999054
5: 3.102685368608307
6: 2.2917808692998527
7: 1.692810881189884
8: 1.2503851122338436
9: 0.9235898388112184
10: 0.6822043720845288
11: 0.5039063724328983
12: 0.3722075708817364
13: 0.2749290014984501
14: 0.2030747404892286
15: 0.1500000000000001

And for index 15 the effect of the roundoff error is obvious. Solution
was to explicitly set
resolutions[numZoomLevels-1] = minResolution;

After the fix, layers remain visible at the most zoomed-in level.
Possibly one might want to do the symmetric thing for maxResolutions.

-Dave
Index: lib/OpenLayers/Layer.js
===================================================================
--- lib/OpenLayers/Layer.js	(revision 10897)
+++ lib/OpenLayers/Layer.js	(working copy)
@@ -1003,9 +1003,10 @@
 
         var i;
         if(typeof maxResolution === "number") {
-            for(i=0; i<numZoomLevels; i++) {
+            for(i=0; i<numZoomLevels - 1; i++) {
                 resolutions[i] = maxResolution / Math.pow(base, i);
             }
+            resolutions[numZoomLevels-1] = minResolution;
         } else {
             for(i=0; i<numZoomLevels; i++) {
                 resolutions[numZoomLevels - 1 - i] =
_______________________________________________
Dev mailing list
d...@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/openlayers-dev

Reply via email to