2010-11-24 15 views
5

Ich habe ein Array von Markern erstellt. Ich benutze diese Anordnung von Markierungen, um auf "Klicken" zu hören und den Marker auf Google Map zu platzieren, sowie Funktionen zu erstellen, um alle Marker zu löschen, alle Marker erneut anzuzeigen und alle Marker zu löschen.So löschen Sie einen Marker auf Google Karte

Das Problem ist, wie mache ich das in einer Weise, wo ich in der Lage bin, einen Marker nach dem anderen zu löschen oder zu löschen? Der Grund ist, weil, wenn ich versehentlich an einen Ort plottete, wo ich nicht möchte, und ich würde es löschen/löschen wollen, konnte ich es nicht tun. Wenn ich löschen waren/Löschen, dass bestimmte Marker, den Rest der Markierungen, die ich vorher gelöscht werden aufgetragen haben/als auch gelöscht ...

Mein Code:

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

Antwort

4

Wenn Sie erstellen Ihre Anstatt sie alle auf die List-MarkerArray zu schieben, könnten Sie sie basierend auf ihrem Lat/Lng (oder besserem Event, einer Art ID) speichern und dann einen Event-Handler für jeden Marker setzen, um ihn selbst aus der Liste der Marker zu entfernen wenn es angeklickt wird.

Ich bin mir nicht sicher, ob Sie beliebige Informationen mit einem google.maps.Marker Objekt speichern können, aber man konnte immer Ihr eigenes Objekt erstellen, das eine ID und ein google.maps.Marker Objekt als Mitglieder hat:

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

Dann würde markersArray[id] = new myMarker(myId, myLocation) Ihnen erlauben, alle Ihre Markierungen basierend auf ihren beliebigen IDs zu speichern. Dann können Sie den Handler, den ich beschrieben habe, auf this.marker zuweisen, um sich von der markersArray Karte zu entfernen.

Eine andere Möglichkeit wäre es, speichern Sie Ihre Markierungen zu tun, basierend auf ihren Lat/LNGS, so dass Ihre markersArray die Markierungen entlang der Linien retten würde:

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

Und Sie können dann zu Ihrem Event-Handler Wenn Sie auf den Marker lat/lng klicken, wird er aus dem Array entfernt und auf diese Weise abgebildet.

Lassen Sie mich wissen, wenn Sie weitere Details benötigen.

Verwandte Themen