2013-03-07 39 views
0

我想讓縮放級別欄顯示與我的脫機緩存相同數量的縮放級別,並且令人驚訝的是gwt-openlayers很難。爲gwt-openlayers和openstreetmap設置縮放級別

我嘗試沒有成功:

osmOptions.getJSObject().setProperty(
    "minZoomLevel", 5); 
osmOptions.getJSObject().setProperty(
    "maxZoomLevel", 11); 

回答

0

方法如下現在正在做的伎倆對我來說:

/** 
* @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); 
} 

//使用示例:

OSMOptions osmOptions = new OSMOptions(); 

    setZoomLevelRange(osmOptions, 5, 11); 

    OSM baseTileLayer = new OSM("Mapnik", 
     // for offline tiles: 
     GWT.getHostPageBaseURL() 
     + "tiles/${z}/${x}/${y}.png", 
     osmOptions); 

的關鍵是:

  1. 顯然有一個神奇的縮放級別1分辨率(我還沒有找到它是如何計算的)。
  2. 您可以通過將其相乘或除以2來添加更高和更低的分辨率。
  3. 根據您用作最小縮放級別的設置設置zoomOffset非常重要。

您的歡迎和是的,你可以複製代碼,只要你想。

參考文獻: http://forum.openstreetmap.org/viewtopic.php?id=6444 http://dev.openlayers.org/apidocs/files/OpenLayers/Layer/XYZ-js.html#OpenLayers.Layer.XYZ.zoomOffset http://osgeo-org.1560.n6.nabble.com/Can-t-restrict-Openlayers-Layer-OSM-to-use-specific-zoom-levels-td3926546.html