我有以下代码将Marker的列表添加到我的Map并自动调整边界:
var fitToMarkers = function(markers) {
var bounds = new google.maps.LatLngBounds();
var length = markers.length;
for (var i = 0; i < length; i++) {
bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng));
map.fitBounds(bounds);
}
};
但我真正想做的是首先将地图置于另一个Marker或LatLng对象的中心,然后将一个标记列表添加到地图中并让地图自动缩小(同时保持原始中心点),直到它适合整个标记列表。
谢谢!
答案 0 :(得分:1)
bounds.extend正在为您完成大部分工作。添加完所有标记后,您将获得包含所有点数的LatLngBounds。您将能够使用getNorthEast()和getSouthWest()来获取此框的角。使用原始中心,您应该能够计算以下内容
1)沿x轴距离中心最远的点 2)沿y轴距离中心最远的点
如果您沿原始中心反映这些值,您应该使用可用于构建新LatLngBounds的值。
map.fitBounds on the bounds应该可以完成你想要的东西。
答案 1 :(得分:1)
可能效率不高,但是......
您可以递归缩小每次检查Lat long是否在地图边界中
// keep zooming out until map contains cords
function zoomOut(bounds, latlng, currentZoom) {
if (!bounds.contains(latlng)) {
var newZoom = currentZoom - 1;
map.setZoom(newZoom);
zoomOut(map.getBounds(), latlng, newZoom);
}
}
var fitToMarkers = function(markers) {
var length = markers.length;
for (var i = 0; i < length; i++) {
var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng)
zoomOut(map.getBounds(), latlng, map.getZoom());
}
};
答案 2 :(得分:0)
这一行
bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng);
最后需要额外的')'
bounds.extend(new google.maps.LatLng(markers[i].lat, markers[i].lng));