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.
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 = [];
}
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
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.
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.
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); }
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();
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.