我使用谷歌地图 API V3。
我迁移我的站点 GMap API V2 -> V3。但应付了,因为我使用 clearOverlays() 方法在 V2 中一次删除现有对象,并且它删除了在 V3 中单独废除的对象。
V2
map.clearOverlays();
V3
map.set_visible(false);
popup.close();
可以吗?或其他解决方案?
我使用谷歌地图 API V3。
我迁移我的站点 GMap API V2 -> V3。但应付了,因为我使用 clearOverlays() 方法在 V2 中一次删除现有对象,并且它删除了在 V3 中单独废除的对象。
V2
map.clearOverlays();
V3
map.set_visible(false);
popup.close();
可以吗?或其他解决方案?
我在V3 参考中找不到任何可以明确清除在地图上创建的叠加层的内容,而且我也找不到任何执行此操作的代码示例。
我认为重要的是要指出 V3 API 是一个非常早期的开发人员版本,并且只包含一组非常基本的功能。他们很可能还没有使用此功能。如果您正在开发实时系统,我建议您坚持使用 V2,直到 V3 更加成熟。
开发人员组上有一篇帖子询问了如何使用 API 的问题,V3 产品经理给出了一个非常有用的答案:
编辑:
好的,为了保持轻量级,API 中似乎故意缺少此功能。您应该自己跟踪覆盖对象并调用:
object.set_map(null);
删除它们。
这是我所做的:
创建一个空数组文字,在制作标记时推送标记,然后在必要时将它们逐出
var eviction_list = [];
function evictMarkers() {
// clear all markers
$(eviction_list).each(function () {
this.set_map(null);
});
// reset the eviction array
eviction_list = [];
}
//in function adding markers
......
marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map,
title: elem.title
});
eviction_list.push(marker);
......
//to clear all markers
evictMarkers();
正如hongwei正确提到的那样,该函数称为setMap(),而不是set_map()。
请参阅http://code.google.com/apis/maps/documentation/v3/overlays.html#HideShow
问题是setMap(null)
当你有很多标记时可能会很慢。