Google Maps API v3:在保持中心点固定的同时使地图适合标记

时间:2012-01-31 23:27:08

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

我有以下代码将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对象的中心,然后将一个标记列表添加到地图中并让地图自动缩小(同时保持原始中心点),直到它适合整个标记列表。

谢谢!

3 个答案:

答案 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));