448 Stimmen

Google Maps API v3: Wie entfernt man alle Markierungen?

Wenn ich in Google Maps API v2 alle Kartenmarkierungen entfernen wollte, konnte ich das einfach tun:

map.clearOverlays();

Wie mache ich das in Google Maps API v3 ?

Die Betrachtung der Referenz-API Das ist mir unklar.

498voto

Gehen Sie einfach wie folgt vor:

I. Deklarieren Sie eine globale Variable:

var markersArray = [];

II. Definieren Sie eine Funktion:

function clearOverlays() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

OR

google.maps.Map.prototype.clearOverlays = function() {
  for (var i = 0; i < markersArray.length; i++ ) {
    markersArray[i].setMap(null);
  }
  markersArray.length = 0;
}

III. Schieben Sie Markierungen in das 'markerArray', bevor Sie Folgendes aufrufen:

markersArray.push(marker);
google.maps.event.addListener(marker,"click",function(){});

IV. Rufen Sie die clearOverlays(); o map.clearOverlays(); Funktion, wo immer sie benötigt wird.

Das war's!!

84voto

Pons Punkte 1737

Das gleiche Problem. Dieser Code funktioniert nicht mehr.

Ich habe es korrigiert, ändern Sie clearMarkers Methode auf diese Weise:

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();
};

Die Dokumentation wurde aktualisiert und enthält nun Einzelheiten zu diesem Thema: https://developers.google.com/maps/documentation/javascript/markers#remove

49voto

Maiku Mori Punkte 7284

In V3 scheint es diese Funktion noch nicht zu geben.

Es wird empfohlen, Verweise auf alle Marker auf der Karte in einem Array zu speichern. Und dann, wenn Sie sie alle löschen wollen, nur Schleife durch das Array und rufen Sie .setMap(null) Methode auf jeder der Referenzen.

Siehe diese Frage für weitere Informationen/Code.

Meine Version:

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);
}

Der Code ist eine bearbeitete Version dieses Codes http://www.lootogo.com/googlemapsapi3/markerPlugin.html Die Notwendigkeit, addMarker manuell aufzurufen, wurde beseitigt.

Profis

  • Auf diese Weise bleibt der Code kompakt und an einem Ort (verschmutzt nicht den Namespace).
  • Sie müssen die Markierungen nicht mehr selbst im Auge behalten, sondern können jederzeit alle Markierungen auf der Karte finden, indem Sie map.getMarkers() aufrufen.

Nachteile

  • Die Verwendung von Prototypen und Wrappern, wie ich es jetzt getan habe, macht meinen Code von Google-Code abhängig, und wenn sie eine größere Änderung in ihrem Quellcode vornehmen, wird dies zum Bruch führen.
  • Wenn Sie es nicht verstehen, können Sie es auch nicht reparieren, wenn es kaputt geht. Die Chancen sind gering, dass sie irgendetwas ändern werden, was die Sache kaputt macht, aber trotzdem
  • Wenn Sie einen Marker manuell entfernen, bleibt seine Referenz im Marker-Array erhalten. (Sie könnten meine setMap-Methode bearbeiten, um es zu beheben, aber auf Kosten der Schleife durch Marker-Array und Entfernen der Referenz)

30voto

rolinger Punkte 2356

Diese Lösung war die einfachste von allen, die ursprünglich von YingYang 11. März '14 um 15:049 unter der ursprünglichen Antwort auf die ursprüngliche Frage des Benutzers

Ich verwende dieselbe Lösung 2,5 Jahre später mit Google Maps v3.18 und es funktioniert wie ein Zauber.

markersArray.push(newMarker) ;
while(markersArray.length) { markersArray.pop().setMap(null); }

// No need to clear the array after that.

22voto

Andrew Punkte 6183
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();
};

Ich glaube nicht, dass es in V3 eine solche Funktion gibt, also habe ich die obige benutzerdefinierte Implementierung verwendet.

Haftungsausschluss: Ich habe diesen Code nicht geschrieben, aber ich habe vergessen, einen Verweis beizubehalten, als ich ihn in meine Codebasis einfügte, also weiß ich nicht, woher er stammt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X