在谷歌地图API v2,如果我想删除所有的地图标记,我可以简单地做:
map.clearOverlays();
我如何做到这一点在谷歌地图API v3?
看看参考API,我不清楚。
在谷歌地图API v2,如果我想删除所有的地图标记,我可以简单地做:
map.clearOverlays();
我如何做到这一点在谷歌地图API v3?
看看参考API,我不清楚。
当前回答
我知道这可能是一个简单的解决方案,但这就是我所做的
$("#map_canvas").html("");
markers = [];
对我来说每次都管用。
其他回答
我尝试了所有提出的解决方案,但当我所有的标记都在一个集群下时,没有一个对我有效。 最后我写了这个:
var markerCluster = new MarkerClusterer(map, markers,
{ imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
agentsGpsData[agentGpsData.ID].CLUSTER = markerCluster;
//this did the trick
agentsGpsData[agentId].CLUSTER.clearMarkers();
换句话说,如果你在一个集群中包装标记,并想要删除所有标记,你调用:
clearMarkers();
最干净的方法是遍历地图的所有功能。标记(以及多边形、折线等)存储在地图的数据层中。
function removeAllMarkers() {
map.data.forEach((feature) => {
feature.getGeometry().getType() === 'Point' ? map.data.remove(feature) : null
});
}
在通过绘图管理器添加标记的情况下,最好创建一个全局标记数组,或者在创建时将标记推入数据层,如下所示:
google.maps.event.addListener(drawingManager, 'overlaycomplete', (e) => {
var newShape = e.overlay;
newShape.type = e.type;
if (newShape.type === 'marker') {
var pos = newShape.getPosition()
map.data.add({ geometry: new google.maps.Data.Point(pos) });
// remove from drawing layer
newShape.setMap(null);
}
});
我推荐第二种方法,因为它允许您稍后使用其他google.maps.data类方法。
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中没有,所以我使用了上面的自定义实现。
免责声明:我没有写这段代码,但我忘记保留引用时,我合并到我的代码库,所以我不知道它来自哪里。
for (i in markersArray) {
markersArray[i].setMap(null);
}
只在IE上工作。
for (var i=0; i<markersArray.length; i++) {
markersArray[i].setMap(null);
}
工作在chrome, firefox,如…
谷歌的Demo Gallery有一个关于他们如何做到这一点的演示:
http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html
您可以查看源代码以查看它们如何添加标记。
长话短说,他们把标记保存在一个全局数组中。当清除/删除它们时,它们循环遍历数组,并在给定的标记对象上调用". setmap (null)"。
然而,这个例子展示了一个“技巧”。对于本例,“清除”意味着将它们从映射中删除,但将它们保留在数组中,这允许应用程序快速将它们重新添加到映射中。在某种意义上,这就像“隐藏”它们。
“Delete”也会清除数组。