如何将标记仅放在边界的边缘内,如 infoWindow autoPan
how to put marker only within edge of bounds like infoWindow autoPan
将位于 google 地图当前边界之外的标记居中非常容易:
if (!map.getBounds().contains(marker.getPosition())) {
myMap.panTo(pos)
}
我想做的是模仿标记的 infoWindow 自动平移,如果标记不在边界内,地图只会平移到足以使其在边界内。除了手动计算与边界边缘的距离并设置仅将其移动必要距离的 "false" 中心之外,是否有更简单的方法来执行此操作?我尝试了 fitBounds,它放大后仍然使标记居中...
Here is a JSBin with a 'hack' solution 不涉及您的任何 lat/lng 或边界计算。确保将 HTML 中的 YOUR_API_KEY
替换为您的 Google 地图 API 密钥。按地图底部的 "Place Random Marker" 按钮查看实际效果。
此解决方案使用 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();
});
我创建了一个新的 InfoWindow 并对其调用 open
,将地图和标记作为参数传递。这会导致地图平移到标记。然后,我创建了一个 MapsEventListener 来侦听地图上的 'center_changed' 事件。一旦它检测到地图的中心发生了变化,信息 window 就会关闭,监听器也会被移除。
将位于 google 地图当前边界之外的标记居中非常容易:
if (!map.getBounds().contains(marker.getPosition())) {
myMap.panTo(pos)
}
我想做的是模仿标记的 infoWindow 自动平移,如果标记不在边界内,地图只会平移到足以使其在边界内。除了手动计算与边界边缘的距离并设置仅将其移动必要距离的 "false" 中心之外,是否有更简单的方法来执行此操作?我尝试了 fitBounds,它放大后仍然使标记居中...
Here is a JSBin with a 'hack' solution 不涉及您的任何 lat/lng 或边界计算。确保将 HTML 中的 YOUR_API_KEY
替换为您的 Google 地图 API 密钥。按地图底部的 "Place Random Marker" 按钮查看实际效果。
此解决方案使用 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();
});
我创建了一个新的 InfoWindow 并对其调用 open
,将地图和标记作为参数传递。这会导致地图平移到标记。然后,我创建了一个 MapsEventListener 来侦听地图上的 'center_changed' 事件。一旦它检测到地图的中心发生了变化,信息 window 就会关闭,监听器也会被移除。