2010-11-24 26 views
5

He creado una matriz de marcadores. Utilizo esta matriz de marcadores para escuchar el 'clic' y colocar el marcador en Google Map, así como también crear funciones para 'borrar todos los marcadores', 'volver a mostrar todos los marcadores' y 'eliminar todos los marcadores'.Cómo eliminar un marcador a la vez en el mapa de google

El problema es, ¿cómo hago esto de forma que pueda borrar o eliminar un marcador al mismo tiempo? La razón es porque si accidentalmente tramaba una ubicación en la que no quería, y me gustaría eliminarla/borrarla, no podría hacerlo. Si tuviera que borrar/eliminar ese marcador particular, el resto de los marcadores que he trazadas previamente se borrarán/borrado, así ...

Mi código:

//Initialize the map 
function initialize() { 
    var myLatlng = new google.maps.LatLng(2,110); 
    var myOptions = { 
     zoom: 3, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    infowindow = new google.maps.InfoWindow({ 
     content: "loading..." 
    }); 
} 

function changeForm(the_form) { 
    window.location = the_form; 
} 


//Listen for click 
function marker() { 
    google.maps.event.addListener(map, 'click', function(event) { 
     addMarker(event.latLng); 
    }); 
} 

// Place markers in by click 
function addMarker(location) { 
    marker = new google.maps.Marker({ 
     position: location, 
     map: map, 
     title:"Specified Location", 
     icon: 'images/greenPoint.png' 
    }); 
    markersArray.push(marker); 
} 

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

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

Respuesta

4

Cuando va a crear su marcadores, en lugar de presionarlos todos en la lista marcadores Array, puede almacenarlos según su Lat/Lng (o evento mejor, algún tipo de id.), y luego establecer un controlador de eventos en cada marcador para eliminarse de la lista de marcadores cuando se hace clic.

no estoy seguro de si se puede almacenar información arbitraria con un objeto google.maps.Marker, pero siempre se puede crear su propio objeto que tiene un ID y un objeto google.maps.Marker ya que sus miembros:

function myMarker(id, location) { 
    this.id = id; 
    this.marker = new google.maps.Marker({...}); 
} 

Luego, markersArray[id] = new myMarker(myId, myLocation) le permitirá almacenar todos sus marcadores en función de sus ID arbitrarios. A continuación, puede asignar el controlador que describí en this.marker para eliminarse del markersArray y del mapa.

Otra manera de hacerlo sería la de almacenar sus marcadores en función de su latitud/LNG, por lo que su markersArray ahorraría los marcadores a lo largo de las líneas de:

markersArray[location.lat][location.lng] = new google.maps.Marker({...}); 

Y a continuación, puede utilizar el controlador de eventos de tomar el lat/lng del marcador cuando se hace clic, y eliminarse de la matriz y el mapa de esa manera.

Avíseme si necesita más información.

Cuestiones relacionadas