【问题标题】:how to put marker only within edge of bounds like infoWindow autoPan如何仅将标记放置在诸如 infoWindow autoPan 之类的边界边缘内
【发布时间】:2018-07-15 21:26:14
【问题描述】:

将位于谷歌地图当前边界之外的标记居中是很容易的:

if (!map.getBounds().contains(marker.getPosition())) { 
    myMap.panTo(pos)
}

我想要做的是模仿标记的 infoWindow 自动平移,如果标记不在边界内,则地图只会平移足够远以使其在边界内。除了手动计算与边界边缘的距离并设置一个仅将其移动必要距离的“假”中心之外,还有更简单的方法吗?我尝试了 fitBounds ,它放大并仍然使标记居中...

【问题讨论】:

    标签: google-maps google-maps-api-3 google-maps-markers marker pan


    【解决方案1】:

    Here is a JSBin with a 'hack' solution 不涉及任何纬度/经度或边界计算。确保将 HTML 中的 YOUR_API_KEY 替换为您的 Google Maps API 密钥。按地图底部的“放置随机标记”按钮以查看它的实际效果。

    此解决方案使用 InfoWindow 对象的自动平移功能将地图平移到足够远,以使标记刚好在边界内。

    处理平移的部分代码在map.panToMarker 方法中。这是它的主体:

    var infoWindow = new google.maps.InfoWindow();
    infoWindow.open(this.map, this.marker);
    google.maps.event.addListenerOnce(this.map, 'center_changed', function() {
      infoWindow.close();
    });
    

    我创建一个新的信息窗口并在其上调用open,将地图和标记作为参数传递。这会导致地图平移到标记。然后,我创建了一个 MapsEventListener 来监听地图上的“center_changed”事件。一旦它检测到地图的中心发生了变化,信息窗口就会关闭并移除监听器。

    【讨论】:

    • 所以本质上您是在利用本机 InfoWindow 平移功能,并在 infoWindow 开始移动时立即摆脱它?当没有本地功能可以做到这一点时,黑客是好的(为什么,我不知道)。即使使用我的 api 密钥,JSBin 也无法正常工作,所以我将全部解除它并尝试使用它的本地版本来修补它。
    • 是的,没错!我输入了我的 API 密钥,它就可以工作了。 this 适合你吗?
    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多