fitBounds不正确居中

时间:2014-04-08 22:34:01

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

初始化地图时,我会在地图上添加1个标记。当我缩小地图时,我可以在地图'副本'上多次看到添加的标记。 zoomed out map with multiple markers visible

当我在地图中搜索位置时,它会添加一个新标记。 之后我使用fitBounds来适应地图上的两个标记。

通常这会导致以下情况: Normally functioning fitBounds

有时它会这样做: Incorrect centering of fitBounds

我感觉fitBounds方法有时使用'另一个世界'上的标记。 两个标记的纬度和经度都是正确的,你可以看到现在左边有2个标记。

有人可以向我解释为什么会发生这种情况以及如何避免/修复它?

以下是搜索提交功能的一部分,我在这里计算边界:

var searchResultLocation = mapSearchPlaces[0].geometry.location;

//Create search marker
marker = new google.maps.Marker({
    position: searchResultLocation,
    animation: google.maps.Animation.BOUNCE,
    map: map
});
searchMarkers.push(marker);

//Find map bounds
var closestMarker = null;
var closest = Number.MAX_VALUE;
for (var i=0; i < markerLocations.length; i++) {
    var distance = google.maps.geometry.spherical.computeDistanceBetween(searchResultLocation, markerLocations[i]);
    if (distance < closest) {
        closest = distance;
        closestMarker = markerLocations[i];
    }
}
var bounds = new google.maps.LatLngBounds(searchResultLocation, closestMarker);
map.fitBounds(bounds);

1 个答案:

答案 0 :(得分:2)

google.maps.LatLngBounds构造函数按特定顺序采用两个非常具体的参数:

  LatLngBounds(sw?:LatLng, ne?:LatLng) | Constructs a rectangle from the points at its south-west and north-east corners.

您应该创建一个空的LatLngBounds对象,并使用以下两点扩展

var bounds = new google.maps.LatLngBounds();
bounds.extend(searchResultLocation);
bounds.extend(closestMarker);
map.fitBounds(bounds);