【发布时间】:2012-06-21 08:36:18
【问题描述】:
我有一堆或标记,我只想显示包含它们的区域。我发现了一长串类似问题(请参阅帖子底部的一些问题),但没有一个解决方案适合我。 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 - Automating Zoom Level?
- Google maps V3 custom marker images and fitBounds()
- Google Maps with fitBounds don't zoom
- fitbounds() in Google maps api V3 does not fit bounds
编辑:如果(就像我在我的应用程序中所做的那样)地图最初是隐藏的,然后才显示出来,这实际上会发生。 我以这种方式隐藏它:
$('#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()),那么即使在隐藏/显示之后,地图也会正确显示。
不过,我无法设置缩放和居中,因为点列表是在其他地方检索的,而我事先不知道它们在哪里。
【问题讨论】:
-
您的某些
list[i]元素可能是“无效的”。尝试调试,看看是否所有list[i]元素都有'lat'、'lon' 属性,而那些不是null、undefined、NaN等。 -
@Engineer 感谢您的评论,但元素都很好。附带说明一下,Firefox 13、Chrome 19 和 IE 9 会发生这种情况。
-
请提供您正在迭代的列表。这将使调试变得更加容易。
标签: javascript google-maps google-maps-api-3 fitbounds