【问题标题】:Center map on specific marker and fitToBounds on other markers特定标记上的中心地图和其他标记上的 fitToBounds
【发布时间】:2013-12-19 04:05:27
【问题描述】:

我有一张带有几个标记的地图,其中一个是“主要”,应该位于地图的中心。我想要实现的是

  1. 在地图中心放置“Major”标记。
  2. 以最佳缩放级别显示所有其他标记。

Fittobounds 将使地图居中而不考虑“主要”标记。无论如何我可以同时实现#1 和#2 吗?

【问题讨论】:

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


    【解决方案1】:
    1. 使用 .extend 将所有标记添加到空的 google.maps.LatLngBounds 对象
    2. 在结果边界上调用 google.maps.Map.fitBounds(将居中并缩放地图以显示所有标记)
    3. 一旦边界发生变化(在 bounds_changed 事件监听器中),将地图置于“主要”标记的中心
    4. 一旦边界第二次改变(在 bounds_changed 事件监听器中),获取视口的更新边界 (google.maps.getBounds)(检查是否有任何标记移出可见地图)李>
    5. 遍历所有标记,如果任何标记的 bounds.contains(markers[i].getPosition()) 为 false,则将边界减小 1(缩小一次)。

    【讨论】:

    • 试过了。有几个问题: 1. 如果从 bounds_changed 事件处理程序调用 map.setCenter 不起作用。 2. bounds_changed 事件被引发了几次。我不确定如何区分在页面加载时在 fitBounds 之后调用的此事件和任何其他可能导致边界更改的事件,例如用户平移。
    • 请在您“尝试过”的地方发布代码。你需要构建一个状态机来处理bounds_changed被调用的多次。
    【解决方案2】:

    是的,只需声明您的新边界对象。

     var bounds = new google.maps.LatLngBounds();
    

    然后对于每个标记,扩展您的边界对象:

    bounds.extend(myLatLng);
    map.fitBounds(bounds);
    

    API:google.maps.LatLngBounds

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 2021-09-10
      • 2013-07-14
      • 2022-11-10
      • 1970-01-01
      • 2016-07-08
      • 2012-10-11
      • 1970-01-01
      相关资源
      最近更新 更多