我有一堆或标记,我只想显示包含它们的区域。我发现了一长串类似问题(请参阅帖子底部的一些问题),但没有一个解决方案适合我。LatLngBounds 是正确构建的,但是当我调用 fitBounds 时,结果将如下: 而不是: 有人能在我的代码中发现明显的错误吗?
var opt = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map"),opt);
var box = new google.maps.LatLngBounds();
for(var i=0;i<list.length;i++){
var p = new google.maps.LatLng(list[i].lat,list[i].lon);
var marker = new google.maps.Marker({
position: p,
map: map
});
box.extend(p);
}
map.fitBounds(box);
map.panToBounds(box);
我阅读并尝试过的一些帖子(列表不全面):
- Google Maps v3 - 自动缩放级别?
- 谷歌地图 V3 自定义标记图像和 fitBounds()
- 带有 fitBounds 的谷歌地图不缩放
- Google 地图 api V3 中的 fitbounds() 不适合边界
编辑:如果(就像我在我的应用程序中所做的那样)地图最初是隐藏的,然后才显示出来,这实际上会发生。我以这种方式隐藏它:
$('#map').hide();
并展示它:
$('#map').show(function(){
//this is necessary because otherwise
//the map will show up in the upper left corner
//until a window resize takes place
google.maps.event.trigger(map, 'resize');
});
关于为什么会发生这种情况以及如何防止它的任何线索(除了在首次显示时初始化地图)?
附带说明一下,如果我在声明地图对象时设置了缩放和居中(即我不使用fitBounds()
),那么即使在隐藏/显示之后,地图也会正确显示。不过,我无法设置缩放和中心,因为点列表是在其他地方检索的,我事先不知道它们在哪里。