【问题标题】:How to get max zoom for maptype in location如何在位置中获得地图类型的最大缩放
【发布时间】:2014-04-25 03:46:01
【问题描述】:

在谷歌地图的JS API reference page上,上面写着方法getMaxZoomAtLatLng

返回在特定 LatLng 下可用的最大缩放级别 卫星地图类型。

出于某种原因,地形地图类型在卡尔加里的 15 级 处触底(例如),但卫星地图类型可以一直到 缩放 19。我有两个同时运行的地图服务,我希望地图同步,但如果它们不能达到相同的缩放级别,它们就不能同步。

所以,基本上我想知道地形图(或任何地图类型)何时无法应对,并触发一些特殊情况的功能。

是否有一种方法或替代方法可以为特定地图类型的位置获取最大缩放(因为上述方法仅适用于卫星)?

【问题讨论】:

    标签: javascript google-maps google-maps-api-3


    【解决方案1】:

    好吧,我决定在此期间采用的一种解决方案是将zoom-end 处理程序附加到我的ArcGIS 地图(也可以使用Leaflet 轻松完成),并将maptypeid_changed 处理程序附加到Google 地图。

    所以,对于 ArcGIS 地图 (eMap),我这样做了:

    eMap.on('zoom-end', function (e) {
      // map zooms are synced
      gMap.setCenter(esri.geometry.webMercatorToGeographic(e.extent.getCenter()));
      gMap.setZoom(e.level);
    
      // if the google map couldn't do it, reset eMap
      if (gMap.getZoom() !== e.level) {
        eMap.setZoom(gMap.getZoom());
        // runs the handler again
      }
    });
    

    如果 google 地图设置为 Satellite,然后发生变化,它也需要触发相同的检查,所以我强制它执行另一个 zoomEnd 处理程序:

    google.maps.event.addListener(gMap, 'maptypeid_changed', function () { 
      // for some reason, ESRI has issues setting zoom to current zoom
      // so it has to run an initial check before calling zoomEnd
      if (gMap.getZoom() !== eMap.getZoom()) {
        eMap.setZoom(gMap.getZoom());
      }
    });
    

    希望这对某人有所帮助,但实际上,我期待看到比这更好的解决方案。如果 Google 的地图类型无法达到某个缩放级别,这似乎是一种非常复杂的方法,仅触发一个函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多