The method below is doing the trick for me now:
/** * @param options * @param minZoomLevel the minimum for this is 3 for open streetmap * @param maxZoomLevel */ private static void setZoomLevelRange(LayerOptions options, int minZoomLevel, int maxZoomLevel) { options.getJSObject().setProperty("zoomOffset", minZoomLevel); int len = maxZoomLevel - minZoomLevel + 1; double[] resolutions = new double[len]; double curRes = 78271.51695 / (Math.pow(2, minZoomLevel - 1)); for (int i = 0; i < len; i++) { resolutions[i] = curRes; curRes = curRes / 2; } options.setResolutions(resolutions); }
// usage example:
OSMOptions osmOptions = new OSMOptions(); setZoomLevelRange(osmOptions, 5, 11); OSM baseTileLayer = new OSM("Mapnik",
// for offline tiles:
GWT.getHostPageBaseURL()
+ "tiles/${z}/${x}/${y}.png",
osmOptions);
The keys are:
- there is apparently a magic zoom level 1 resolution (I have not found how it is calculated).
- you can add higher and lower resolutions by multiplying or dividing them by 2.
- it is critical that you set the zoomOffset in accordance to what you use as your minimum zoom level.
Your welcome and yeah you may copy the code as you want.
References:
http://dev.openlayers.org/apidocs/files/OpenLayers/Layer/XYZ-js.html#OpenLayers.Layer.XYZ.zoomOffset
Can you log a feature request with gwt-openlayers, using it a lot these days :)
ReplyDeleteSo new OSMOptions().setNumZoomLevels(x) does not work properly with OSM ?
I think setNumZoomLevels does work, it just does not let you set at what zoom level you start at :(
ReplyDelete