Dans Google Maps API v2, si je voulais supprimer tous les marqueurs de carte, je pouvais simplement faire:
map.clearOverlays();
Comment procéder dans Google Maps API v3?
En regardant la API de référence , cela m'est incertain.
Faites simplement ce qui suit:
I. Déclarer une variable globale:
var markersArray = [];
II. Définir une fonction:
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. Poussez les marqueurs dans le 'markerArray' avant d'appeler le suivant:
markersArray.Push(marker);
google.maps.event.addListener(marker,"click",function(){});
IV Appelez la fonction clearOverlays();
ou map.clearOverlays();
chaque fois que nécessaire.
C'est tout!!
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 le sujet: https://developers.google.com/maps/documentation/javascript/markers#remove
Il semble qu’il n’existe pas encore de fonction de ce type dans V3.
Les gens suggèrent de garder des références à tous les marqueurs que vous avez sur la carte dans un tableau. Et ensuite, lorsque vous souhaitez tout supprimer, il vous suffit de parcourir le tableau 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 modifiée de ce code http://www.lootogo.com/googlemapsapi3/markerPlugin.html J'ai supprimé la nécessité d'appeler addMarker manuellement.
Avantages
Les inconvénients
C’était la plus simple de toutes les solutions initialement publiées par YingYang le 11 mars 2014 à 15h09 dans la réponse originale à la question initiale de l'utilisateur
J'utilise sa même solution deux ans et demi plus tard avec Google Maps v3.18 et cela fonctionne comme un charme
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 un dans la V3, alors j'ai utilisé l'implémentation personnalisée ci-dessus.
Clause de non-responsabilité: je n'ai pas écrit ce code, mais j'ai oublié de conserver une référence lorsque je l'ai intégré à ma base de code. Je ne sais donc pas d'où il provient.
Sur la nouvelle version v3, ils ont recommandé de garder dans les tableaux. comme suit.
Voir l'exemple à overlay-overview .
var map;
var markersArray = [];
function initialize() {
var haightAshbury = new google.maps.LatLng(37.7699298, -122.4469157);
var mapOptions = {
zoom: 12,
center: haightAshbury,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
google.maps.event.addListener(map, 'click', function(event) {
addMarker(event.latLng);
});
}
function addMarker(location) {
marker = new google.maps.Marker({
position: location,
map: map
});
markersArray.Push(marker);
}
// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
}
}
// Shows any overlays currently in the array
function showOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(map);
}
}
}
// Deletes all markers in the array by removing references to them
function deleteOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
markersArray.length = 0;
}
}
for (i in markersArray) {
markersArray[i].setMap(null);
}
ne travaille que sur IE.
for (var i=0; i<markersArray.length; i++) {
markersArray[i].setMap(null);
}
travailler sur chrome, firefox, c.-à-d.
La solution est assez simple. Vous pouvez utiliser la méthode suivante: marker.setMap(map);
. Ici, vous définissez sur quelle carte l’épingle apparaîtra.
Donc, si vous définissez null
dans cette méthode (marker.setMap(null);
), la broche disparaîtra.
Vous pouvez maintenant écrire une fonction en faisant disparaître tous les marqueurs de votre carte.
Vous venez d’ajouter pour placer vos pins dans un tableau et les déclarer avec markers.Push (your_new pin)
ou ce code par exemple:
// Adds 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);
}
C'est une fonction qui peut définir ou faire disparaître tous les marqueurs de votre tableau dans la carte:
// Sets the map on all markers in the array.
function setMapOnAll(map) {
for (var i = 0; i < markers.length; i++) {
markers[i].setMap(map);
}
}
Pour faire disparaître tous vos marqueurs, vous devez appeler la fonction avec null
:
// Removes the markers from the map, but keeps them in the array.
function clearMarkers() {
setMapOnAll(null);
}
Et, pour supprimer et supprimer tous vos marqueurs, vous devez réinitialiser votre tableau de marqueurs comme ceci:
// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
clearMarkers();
markers = [];
}
Ceci est mon code complet. C’est le plus simple que je puisse réduire. Attention vous pouvez remplacer YOUR_API_KEY
dans le code par votre clé google API:
<!DOCTYPE html>
<html>
<head>
<title>Remove Markers</title>
<style>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
#map {
height: 100%;
}
</style>
</head>
<body>
<div id="map"></div>
<p>Click on the map to add markers.</p>
<script>
// In the following example, markers appear when the user clicks on the map.
// The markers are stored in an array.
// The user can then click an option to hide, show or delete the markers.
var map;
var markers = [];
function initMap() {
var haightAshbury = {lat: 37.769, lng: -122.446};
map = new google.maps.Map(document.getElementById('map'), {
zoom: 12,
center: haightAshbury,
mapTypeId: 'terrain'
});
// This event listener will call addMarker() when the map is clicked.
map.addListener('click', function(event) {
addMarker(event.latLng);
});
// Adds a marker at the center of the map.
addMarker(haightAshbury);
}
// Adds 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 setMapOnAll(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() {
setMapOnAll(null);
}
// Shows any markers currently in the array.
function showMarkers() {
setMapOnAll(map);
}
// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
clearMarkers();
markers = [];
}
</script>
<script async defer
src="https://maps.googleapis.com/maps/api/js key=YOUR_API_KEY&callback=initMap">
</script>
</body>
</html>
Vous pouvez consulter développeur google ou la documentation complète sur, également, site Web développeur google .
La galerie de démonstration de Google propose une démonstration de la manière dont il procède:
http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html
Vous pouvez afficher le code source pour voir comment ils ajoutent des marqueurs.
En bref, ils gardent les marqueurs dans un tableau global. Lorsqu'ils les effacent ou les effacent, ils parcourent le tableau et appellent ".setMap (null)" sur l'objet marqueur donné.
Cependant, cet exemple montre une "astuce". "Effacer" pour cet exemple signifie les supprimer de la carte mais les conserver dans le tableau, ce qui permet à l'application de les rajouter rapidement à la carte. Dans un sens, cela agit comme de les "cacher".
"Delete" efface également le tableau.
Une application propre et facile de la réponse de rolinger.
function placeMarkerAndPanTo(latLng, map) {
while(markersArray.length) { markersArray.pop().setMap(null); }
var marker = new google.maps.Marker({
position: latLng,
map: map
});
map.panTo(latLng);
markersArray.Push(marker) ;
}
La fonction "set_map
" publiée dans les deux réponses semble ne plus fonctionner dans l'API Google Maps v3.
Je me demande ce qui est arrivé
Mettre à jour:
Il semble que Google ait modifié son API de sorte que "set_map
" ne soit pas "setMap
".
http://code.google.com/apis/maps/documentation/v3/reference.html
Ici vous pouvez trouver un exemple sur la façon de supprimer des 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 = [];
}
J'ai trouvé l'utilisation de la bibliothèque markermanager dans le projet google-maps-utility-library-v3 comme le moyen le plus simple.
1. Configurez le MarkerManager
mgr = new MarkerManager(map);
google.maps.event.addListener(mgr, 'loaded', function () {
loadMarkers();
});
2. Ajouter des marqueurs à 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 vous suffit d'appeler la fonction clearMarkers()
du MarkerManger
mgr.clearMarkers();
Ce qui suit de Anon fonctionne parfaitement, mais avec des scintillements lorsque vous effacez plusieurs fois les superpositions.
Faites simplement ce qui suit:
I. Déclarer une variable globale:
var markersArray = [];
II. Définir une fonction:
function clearOverlays() {
if (markersArray) {
for (i in markersArray) {
markersArray[i].setMap(null);
}
}
}
III. Poussez les marqueurs dans le 'markerArray' avant d'appeler le suivant:
markersArray.Push(marker);
google.maps.event.addListener(marker,"click",function(){});
IV. Appelez la fonction clearOverlays()
si nécessaire.
C'est tout!!
J'espère que cela vous aidera.
Je viens d'essayer cela avec kmlLayer.setMap (null) et cela a fonctionné. Je ne sais pas si cela fonctionnerait avec les marqueurs normaux, mais semble fonctionner correctement.
Pour effacer tous les calques, y compris les polys, les marqueurs, etc ...
simplement utiliser:
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);}
Voici une fonction que j'ai écrite pour le faire me former sur une application de carte:
function clear_Map() {
directionsDisplay = new google.maps.DirectionsRenderer();
//var chicago = new google.maps.LatLng(41.850033, -87.6500523);
var myOptions = {
zoom: 8,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: HamptonRoads
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
directionsDisplay.setMap(map);
directionsDisplay.setPanel(document.getElementById("directionsPanel"));
}
Pour supprimer tous les marqueurs de la carte, créez des fonctions telles que:
1.addMarker (location): cette fonction permet d’ajouter un marqueur sur la carte
2.clearMarkers (): cette fonction supprime tous les marqueurs de la carte, pas du tableau
3.setMapOnAll (map): cette fonction permet d'ajouter des informations sur les marqueurs dans un tableau.
4.deleteMarkers (): cette fonction supprime tous les marqueurs du tableau en supprimant les références à ceux-ci.
// Adds 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 setMapOnAll(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() {
setMapOnAll(null);
}
// Deletes all markers in the array by removing references to them.
function deleteMarkers() {
clearMarkers();
markers = [];
}
Pour ce faire, le moyen le plus simple consiste à parcourir toutes les caractéristiques de la carte. Les marqueurs (ainsi que les polygones, les polylignes, etc.) sont stockés dans la couche data 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 via dessinateur , il est préférable de créer un tableau global de marqueurs ou d'insérer les marqueurs dans la couche de données lors de la création, de la manière suivante:
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.
Vous pouvez le faire aussi:
function clearMarkers(category){
var i;
for (i = 0; i < markers.length; i++) {
markers[i].setVisible(false);
}
}
C'est la méthode que Google utilise elle-même dans au moins un exemple:
var markers = [];
// Clear out the old markers.
markers.forEach(function(marker) {
marker.setMap(null);
});
markers = [];
Consultez l'exemple de Google pour obtenir un exemple de code complet:
https://developers.google.com/maps/documentation/javascript/examples/places-searchbox
Je ne sais pas pourquoi, mais régler setMap(null)
sur mes marqueurs ne fonctionnait pas pour moi lorsque j'utilise DirectionsRenderer
.
Dans mon cas, j'ai également dû appeler setMap(null)
à ma DirectionsRenderer
.
Quelque chose comme ca:
var directionsService = new google.maps.DirectionsService();
var directionsDisplay = new google.maps.DirectionsRenderer();
if (map.directionsDisplay) {
map.directionsDisplay.setMap(null);
}
map.directionsDisplay = directionsDisplay;
var request = {
Origin: start,
destination: end,
travelMode: google.maps.TravelMode.DRIVING
};
directionsDisplay.setMap(map);
directionsService.route(request, function (result, status) {
if (status == google.maps.DirectionsStatus.OK) {
directionsDisplay.setDirections(result);
}
});
J'ai essayé toutes les solutions proposées, mais rien ne fonctionnait pour moi alors que tous mes marqueurs se trouvaient sous un cluster .
var markerCluster = new MarkerClusterer(map, markers,
{ imagePath: 'https://developers.google.com/maps/documentation/javascript/examples/markerclusterer/m' });
agentsGpsData[agentGpsData.ID].CLUSTER = markerCluster;
//this did the trick
agentsGpsData[agentId].CLUSTER.clearMarkers();
En d'autres termes, si vous enroulez des marqueurs dans un cluster et souhaitez supprimer tous les marqueurs, vous appelez:
clearMarkers();
J'utilise un raccourci qui fait bien le travail. Il suffit de faire
map.clear();
il suffit d'effacer Googlemap
mGoogle_map.clear();
Il suffit de marcher sur les marqueurs et de les supprimer de la carte, puis vider le tableau de marqueurs de cartes:
var markers = map.markers;
for(var i = 0; i < markers.length; i++) {
markers[i].setMap(null);
}
map.markers = [];