425 votos

Google Maps API v3: ¿Cómo eliminar todos los marcadores?

En Google Maps API v2, si quería eliminar todos los marcadores de mapa, yo podría simplemente hacer:

 map.clearOverlays();
 

¿Cómo puedo hacer esto en Google Maps v3 API?

En cuanto a la API de referencia , no está claro para mí.

84voto

Pons Puntos 1010

El mismo problema. Este código no funciona más.

He corregido ella, método de cambio clearMarkers de esta manera:

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

Documentación ha sido actualizado para incluir información sobre el tema: https://developers.google.com/maps/documentation/javascript/markers#remove

47voto

Maiku Mori Puntos 4329

Parece que no hay tal función en la V3 todavía.

Personas sugieren mantener referencias a todos los marcadores que tienes en el mapa en una matriz. Y, a continuación, cuando desee eliminar em all, solo bucle a través de la matriz y de la llamada .setMap(null) método en cada una de las referencias.

Ver a esta pregunta por más información/código.

Mi versión:

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

El código es una versión editada de este código http://www.lootogo.com/googlemapsapi3/markerPlugin.html he eliminado la necesidad de llamar a addMarker manualmente.

Pros

  • Haciendo de esta manera a mantener el código compacto y en un lugar (no contamina el espacio de nombres).
  • Usted no tiene que mantener un seguimiento de los marcadores de ti mismo ya que siempre se puede encontrar todos los marcadores en el mapa llamando map.getMarkers()

Los contras

  • El uso de prototipos y contenedores como yo lo hice, hace ahora mi código de dependiente en Google code, si hacen un alcalde, un cambio en su origen este se va a romper.
  • Si usted no entiende esto, entonces no será capaz de arreglarlo si llega a romperse. Las posibilidades son bajas, que van a cambiar nada, lo que acabará esto, pero aún así..
  • Si se quita un marcador de forma manual, es la referencia seguirá siendo en los marcadores de la matriz. (Se podría modificar mi setMap método para solucionarlo, pero al costo de bucle comedero marcadores de la matriz y la eliminación de la referencia)

21voto

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

No creo que hay una en V3, así que utiliza la implementación personalizada de arriba.

Descargo de responsabilidad: yo no escribí este código, pero me olvidé de mantener una referencia cuando me fundí en mi base de código, así que no sé de dónde vino.

17voto

Jirapong Puntos 12684

En la nueva versión v3, Recomendaron mantener en arrays. de la siguiente manera.

Vea el ejemplo en superposición-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;
  }
}
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X