Google 映射 API V3方法 fitBound()

我用这个代码来绘制地图。

function initialize() {
var myOptions = {
center: new google.maps.LatLng(45.4555729, 9.169236),
zoom: 13,
mapTypeId: google.maps.MapTypeId.ROADMAP,


panControl: true,
mapTypeControl: false,
panControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
},
zoomControl: true,
zoomControlOptions: {
style: google.maps.ZoomControlStyle.LARGE,
position: google.maps.ControlPosition.RIGHT_CENTER
},
scaleControl: false,
streetViewControl: false,
streetViewControlOptions: {
position: google.maps.ControlPosition.RIGHT_CENTER
}
};
var map = new google.maps.Map(document.getElementById("mapCanvas"),
myOptions);






var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776);


var myPlace = new google.maps.LatLng(45.4555729, 9.169236);


var marker = new google.maps.Marker({
position: Item_1,
map: map});


var marker = new google.maps.Marker({
position: myPlace,
map: map});


var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);


}

即使这两点相距25公里,我也会得到这样的结果:

enter image description here

而我想呈现一个更高级别的缩放。

像这样

enter image description here

我使用 FiBound ()方法

    var bounds = new google.maps.LatLngBounds(myPlace, Item_1);
map.fitBounds(bounds);

谢谢你的支持

166536 次浏览

这是因为 LatLngBounds()不采用两个任意点作为参数,而是采用 SW 和 NE 点

对空白边界对象使用 .extend()方法

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

http://jsfiddle.net/gaby/22qte/演示

LatLngBounds必须按照(西南,东北)顺序来定义。你的点不是按照这个顺序来的。

一般的解决办法,尤其是如果你不知道点肯定是按照这个顺序的话,就是扩展一个空边界:

var bounds = new google.maps.LatLngBounds();
bounds.extend(myPlace);
bounds.extend(Item_1);
map.fitBounds(bounds);

API 将对边界进行排序。

我有同样的问题,你所描述的,虽然我正在建立我的 LatLngBound,如上所述。问题是事情是异步的,在错误的时间调用 map.fitBounds()可能会导致类似 Q 的结果。 我发现的最佳方法是将调用放在一个空闲处理程序中,如下所示:

google.maps.event.addListenerOnce(map, 'idle', function() {
map.fitBounds(markerBounds);
});
 var map = new google.maps.Map(document.getElementById("map"),{
mapTypeId: google.maps.MapTypeId.ROADMAP


});
var bounds = new google.maps.LatLngBounds();


for (i = 0; i < locations.length; i++){
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
bounds.extend(marker.position);
}
map.fitBounds(bounds);