为gwt openlayers和openstreetmap设置缩放级别

为gwt openlayers和openstreetmap设置缩放级别,gwt,openstreetmap,gwt-openlayers,Gwt,Openstreetmap,Gwt Openlayers,我正试图让缩放级别栏显示与脱机缓存相同数量的缩放级别,而使用gwt openlayers则非常困难 我试过,但没有成功: osmOptions.getJSObject().setProperty( "minZoomLevel", 5); osmOptions.getJSObject().setProperty( "maxZoomLevel", 11); 下面的方法正在为我实现这一点: /** * @param options * @param minZoomLevel th

我正试图让缩放级别栏显示与脱机缓存相同数量的缩放级别,而使用gwt openlayers则非常困难

我试过,但没有成功:

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

下面的方法正在为我实现这一点:

/**
 * @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级分辨率(我还没有发现它是如何计算的)
  • 通过将分辨率乘以或除以2,可以添加更高和更低的分辨率
  • 根据使用的最小缩放级别设置zoomOffset非常重要
  • 欢迎你,你可以复制你想要的代码

    参考资料: