441 votes

API Google Maps v3 : comment supprimer tous les marqueurs ?

Dans l'API Google Maps v2, si je voulais supprimer tous les marqueurs de carte, je pouvais simplement le faire :

map.clearOverlays();

Comment faire dans l'API de Google Maps v3 ?

En regardant le API de référence c'est pas clair pour moi.

3 votes

J'ai trouvé un peu de code au lien ci-dessous, mais bon sang - c'est beaucoup de code pour simuler la précédente ligne de code dans la v2 de l'API. lootogo.com/googlemapsapi3/markerPlugin.html

2 votes

N'oubliez pas que maps 3.0 est censé être TRÈS léger afin que les appareils mobiles puissent l'utiliser avec le moins de décalage possible...

1 votes

Les solutions proposées ici semblent ne pas fonctionner à partir du 29/07/2010. J'aimerais avoir une version fonctionnelle à proposer à la place.

4voto

Pablo Points 27

Vous trouverez ici un exemple de la manière de supprimer les marqueurs :

https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es

// Add a marker to the map and push to the array.
function addMarker(location) {
  var marker = new google.maps.Marker({
    position: location,
    map: map
  });
  markers.push(marker);
}

// Sets the map on all markers in the array.
function setAllMap(map) {
  for (var i = 0; i < markers.length; i++) {
    markers[i].setMap(map);
   }
}

// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
  setAllMap(null);
}

// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
  clearMarkers();
  markers = [];
}

4voto

GregN Points 41

Le " set_map Il semble que la fonction "Afficher" affichée dans les deux réponses ne fonctionne plus dans l'API de Google Maps v3.

Je me demande ce qui s'est passé

Mise à jour :

Il semble que Google ait modifié son API de telle sorte que " set_map " n'est pas " setMap ".

http://code.google.com/apis/maps/documentation/v3/reference.html

3voto

Mimo Points 36

La façon la plus propre de le faire est d'itérer sur toutes les caractéristiques de la carte. Les marqueurs (ainsi que les polygones, les polylignes, etc.) sont stockés dans le fichier couche de données de la carte.

function removeAllMarkers() {
  map.data.forEach((feature) => {
    feature.getGeometry().getType() === 'Point' ? map.data.remove(feature) : null
  });
}

Dans le cas où les marqueurs sont ajoutés par le biais de l'option responsable du dessin il est préférable de créer un tableau global de marqueurs ou de pousser les marqueurs dans la couche de données à la création comme suit :

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

Je recommande la deuxième approche car elle vous permet d'utiliser ultérieurement d'autres méthodes de la classe google.maps.data.

3voto

middlewhere Points 39

La méthode suivante d'Anon fonctionne parfaitement, mais avec des scintillements lors de l'effacement répété des superpositions.

Il suffit de faire ce qui suit :

I. Déclarer une variable globale :

var markersArray = [];

II. Définissez une fonction :

function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

III. Placez les marqueurs dans le 'markerArray' avant d'appeler ce qui suit :

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

IV. Appelez le clearOverlays() à chaque fois que cela est nécessaire.

C'est ça !

J'espère que cela vous aidera.

1 votes

for(in in markersArray){} ne fait probablement pas ce que vous attendez d'elle. Si Array est étendu n'importe où ailleurs dans le code, il itérera sur ces propriétés également, et pas seulement sur les index. La version javascript de cela est markersArray.forEach() qui n'est pas supporté partout. Vous feriez mieux d'utiliser for(var i=0; i<markersArray.length; ++i){ markersArray.setMap(null); }

3voto

Craig Fruin Points 94

J'ai trouvé que l'utilisation de la bibliothèque markermanager dans le projet google-maps-utility-library-v3 était le moyen le plus simple.

1. Configurer le MarkerManager

mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function () {
    loadMarkers();
});

2. Ajouter des marqueurs au MarkerManager

function loadMarkers() {
  var marker = new google.maps.Marker({
            title: title,
            position: latlng,
            icon: icon
   });
   mgr.addMarker(marker);
   mgr.refresh();
 }

3. Pour effacer les marqueurs, il suffit d'appeler la fonction clearMarkers() fonction

mgr.clearMarkers();

0 votes

C'est un peu exagéré de faire appel à cette bibliothèque pour nettoyer les marqueurs. Tous clearMarkers est d'itérer sur les marqueurs en appelant marker.setMap(null) (j'ai vérifié la source). Il serait moins difficile de les mettre dans un tableau et de le faire vous-même.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X