在 Google Maps API v2 中,如果我想删除所有地图标记,我可以简单地执行以下操作:
map.clearOverlays();
如何在 Google Maps API v3 中执行此操作?
查看Reference API,我不清楚。
在 Google Maps API v2 中,如果我想删除所有地图标记,我可以简单地执行以下操作:
map.clearOverlays();
如何在 Google Maps API v3 中执行此操作?
查看Reference API,我不清楚。
只需执行以下操作:
一、声明一个全局变量:
var markersArray = [];
二、定义一个函数:
function clearOverlays() {
for (var i = 0; i < markersArray.length; i++ ) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
或者
google.maps.Map.prototype.clearOverlays = function() {
for (var i = 0; i < markersArray.length; i++ ) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
三、在调用以下命令之前在“markerArray”中推送标记:
markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});
四、在需要的地方调用clearOverlays();
ormap.clearOverlays();
函数。
而已!!
同样的问题。此代码不再起作用。
我已经更正了,以这种方式更改 clearMarkers 方法:
set_map(null) ---> setMap(null)
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i < this.markers.length; i++){
this.markers[i].setMap(null);
}
this.markers = new Array();
};
文档已更新以包含有关该主题的详细信息:https : //developers.google.com/maps/documentation/javascript/markers#remove
V3好像还没有这个功能。
人们建议将地图上所有标记的引用保留在数组中。然后当你想全部删除它们时,只需循环遍历数组并在每个引用上调用 .setMap(null) 方法。
我的版本:
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.getMarkers = function() {
return this.markers
};
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i<this.markers.length; i++){
this.markers[i].setMap(null);
}
this.markers = new Array();
};
google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;
google.maps.Marker.prototype.setMap = function(map) {
if (map) {
map.markers[map.markers.length] = this;
}
this._setMap(map);
}
该代码是此代码的编辑版本http://www.lootogo.com/googlemapsapi3/markerPlugin.html我删除了手动调用 addMarker 的需要。
优点
缺点
这是YingYang 于 2014 年 3 月 11 日 15:049在对用户原始问题的原始回复下最初发布的所有解决方案中最简单的
2.5 年后,我在 google maps v3.18 上使用他的相同解决方案,它的作用就像一个魅力
markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }
// No need to clear the array after that.
google.maps.Map.prototype.markers = new Array();
google.maps.Map.prototype.addMarker = function(marker) {
this.markers[this.markers.length] = marker;
};
google.maps.Map.prototype.getMarkers = function() {
return this.markers
};
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i<this.markers.length; i++){
this.markers[i].setMap(null);
}
this.markers = new Array();
};
我认为 V3 中没有,所以我使用了上面的自定义实现。
免责声明:这段代码不是我写的,但我在将它合并到我的代码库中时忘记保留引用,所以我不知道它来自哪里。