In Google Maps API v2, se volessi rimuovere tutti i marcatori della mappa, potrei semplicemente fare:
map.clearOverlays();
Come faccio a farlo in Google Maps API v3?
Guardando le API di riferimento, non mi è chiaro.
Sembra che non ci sia ancora questa funzione nella V3.
La gente suggerisce di tenere i riferimenti a tutti i marcatori che hai sulla mappa in un array. E poi quando vuoi cancellarli tutti, basta fare un ciclo attraverso l'array e chiamare il metodo .setMap(null) su ognuno dei riferimenti.
Vedi questa domanda per maggiori informazioni/codice.
La mia versione:
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);
}
Il codice è la versione modificata di questo codice http://www.lootogo.com/googlemapsapi3/markerPlugin.html Ho rimosso la necessità di chiamare addMarker manualmente.
Pro
Contro
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();
};
Non credo che ce ne sia uno in V3, quindi ho usato l'implementazione personalizzata di cui sopra.
Disclaimer: non ho scritto questo codice ma ho dimenticato di mantenere un riferimento quando l'ho fuso nel mio codebase quindi non so da dove sia venuto.
La funzione "set_map
" postata in entrambe le risposte sembra non funzionare più in Google Maps v3 API.
Mi chiedo cosa sia successo
Aggiornamento:
Sembra che Google abbia cambiato le loro API in modo tale che "set_map
" non è "setMap
".
http://code.google.com/apis/maps/documentation/v3/reference.html