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.
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.
Il suffit de faire ce qui suit :
I. Déclarer une variable globale :
var markersArray = [];
II. Définissez une fonction :
function clearOverlays() {
for (var i = 0; i < markersArray.length; i++ ) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
OU
google.maps.Map.prototype.clearOverlays = function() {
for (var i = 0; i < markersArray.length; i++ ) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
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();
ou map.clearOverlays();
à chaque fois que cela est nécessaire.
C'est ça !
For..in boucle avec un Array ? cela ne peut pas être bon sûrement ? ..voir : stackoverflow.com/questions/500504/
Vous pouvez également masquer les marqueurs à l'aide de la fonction marker.setVisible(false).
De cette façon, les marqueurs sont juste cachés de la carte, ou ils sont complètement supprimés ? Je pose cette question car après les avoir supprimés, je dois ajouter de nouveaux marqueurs à la carte.
Même problème. Ce code ne fonctionne plus.
Je l'ai corrigé, changez la méthode clearMarkers de cette façon :
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();
};
La documentation a été mise à jour pour inclure des détails sur ce sujet : https://developers.google.com/maps/documentation/javascript/markers#remove
La façon dont j'ai finalement réussi à le faire fonctionner était d'itérer à travers la collection de marqueurs où je les ai stockés et d'utiliser setMap(null)
Mais est-ce que cela efface les marqueurs de la mémoire ? Je sais que JavaScript dispose d'un système de collecte automatique des déchets, mais comment savoir si l'API de Google ne détient pas une référence au marqueur lorsque setMap(null) est appelé ? Dans mon application, j'ajoute et je "supprime" une tonne de marqueurs, et je ne voudrais pas que tous ces marqueurs "supprimés" consomment de la mémoire.
Il semble qu'une telle fonction n'existe pas encore dans la V3.
Les gens suggèrent de garder les références à tous les marqueurs que vous avez sur la carte dans un tableau. Ensuite, lorsque vous souhaitez tous les supprimer, il suffit de parcourir le tableau en boucle et d'appeler la méthode .setMap(null) sur chacune des références.
Voir cette question pour plus d'informations/code.
Ma 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);
}
Le code est une version éditée de ce code http://www.lootogo.com/googlemapsapi3/markerPlugin.html J'ai supprimé la nécessité d'appeler addMarker manuellement.
Pour
Cons
+1 de ma part. Mais votre réponse serait meilleure si vous incluiez le wrapper pour appeler addMarker automatiquement !
Je suppose que vous faites référence à la réponse d'Andrews en fait. Pourriez-vous montrer avec un code ce que vous feriez différemment et pourquoi ? Merci
Meh désolé pour le retard, je me retenais de poster le code parce que je n'avais aucun moyen de le tester rapidement.
C'est la solution la plus simple parmi toutes celles qui ont été proposées à l'origine par YingYang 11 Mar '14 à 15:049 sous la réponse originale à la question originale de l'utilisateur
J'utilise la même solution 2,5 ans plus tard avec google maps v3.18 et cela fonctionne à merveille.
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();
};
Je ne pense pas qu'il y en ait une dans la V3, j'ai donc utilisé l'implémentation personnalisée ci-dessus.
Disclaimer : Je n'ai pas écrit ce code mais j'ai oublié de conserver une référence lorsque je l'ai fusionné dans ma base de code donc je ne sais pas d'où il vient.
+1 de ma part. J'ajouterais un wrapper autour du constructeur google.maps.Marker (ou la méthode setMap car je pense que le constructeur l'appelle en interne) qui appelle addMarker automatiquement, mais quand même une bonne réponse :).
@Maiku Mari, pourriez-vous montrer avec le code ce que vous feriez différemment et pourquoi. Merci
En quoi cela n'est-il pas la solution ? Vous supprimez les marqueurs en utilisant set_map(null) sur le marqueur particulier que vous voulez effacer, si vous voulez tous les effacer alors bouclez en utilisant cette fonction. Si vous voulez quelque chose de plus, demandez-le ici : code.google.fr/p/gmaps-api-issues/issues/
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.
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.
9 votes
La réponse la mieux notée est fausse. Regardez la source de cet exemple pour voir comment faire : google-developers.appspot.com/maps/documentation/javascript/
0 votes
Veuillez jeter un coup d'œil à cette page gmaps-utility-library.googlecode.com/svn/trunk/markermanager/
0 votes
Veuillez sélectionner une réponse.