2011-12-15 13 views
20

Sono 2 funzionano come di seguito:API di Google Maps 3 Rimuovere marker selezionato Solo

function addMarker() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 

    google.maps.event.addListener(marker, "rightclick", 
    function (point) { 
    showContextMarker(point.latLng); }); 
    $('.contextmenu').remove(); 
}; 

function delMarker() { marker.setMap(null); $('.contextmenu').remove(); }; 

Quindi, come si può capire che ho un menu di contesto con "Delete Marker" l'opzione su di esso. leggo un listener "rightclick" durante l'aggiunta di un marker, per mostrare questo menu.

Tutto funziona senza problemi fino a questo momento.

Ma quando provo a fare clic su un marcatore per eliminare; sta effettuando solo l'ultimo marker aggiunto. Quando ci riprovo; non accade nulla.

Quindi la mia idea è di ottenere l'id del marcatore cliccato (o qualcosa che potrebbe essere utile) ed eseguire questa funzione di eliminazione in base a questo.

Brevemente; Voglio eliminare il marcatore su cui ho fatto clic, da una mappa con più marcatori.

Avete qualche approccio per risolvere questo problema?

Grazie in anticipo!

RISOLTO!

Ecco la soluzione. Grazie Fatih. è stato impossibile senza la tua guida:

var id; 
var markers = {}; 
var addMarker = function() { 
    marker = new google.maps.Marker({ 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    map.panTo(Gpoint); 
    id = marker.__gm_id 
    markers[id] = marker; 

    google.maps.event.addListener(marker, "rightclick", function (point) { id = this.__gm_id; delMarker(id) }); 
} 

var delMarker = function (id) { 
    marker = markers[id]; 
    marker.setMap(null); 
} 

la funzione di chiamata eliminare da: delMarker(id) Ps: "clic destro è abbastanza su questo caso"

Grazie!

+0

Ma cosa vuoi raggiungere ???. Rimuovere tutti i marcatori? – Jorge

+0

Rimuovi solo quello su cui è stato fatto clic! – MrGorki

+0

@ MrGorki, come hai generato __gm_id? È incrementato? – jemz

risposta

41

Working Sample on jsFiddle


Google Maps non gestire i tuoi marcatori. Quindi tutti i tuoi marcatori dovrebbero essere gestiti da te.

Creare un oggetto indicatore globale e spingere tutti i marcatori su questo oggetto. E dai un identificativo univoco a ciascun marcatore quando ricevi un'istanza di un segnalino. Quindi, quando vuoi eliminare un marker, prendi il suo id e trova questo marker nell'oggetto marker globale e infine chiama questo metodo setMap dell'istanza marker con il passaggio dell'argomento null.

Inoltre ho aggiunto una demo che funziona su jsFiddle. Il codice è molto documentato.

Il tuo codice psuedo dovrebbe essere come questo. Per un codice più dettagliato, guarda la demo.

 
var currentId = 0; 
var uniqueId = function() { 
    return ++currentId; 
} 

var markers = {}; 
var createMarker = function() { 
    var id = uniqueId(); // get new id 
    var marker = new google.maps.Marker({ // create a marker and set id 
     id: id, 
     position: Gpoint, 
     map: map, 
     draggable: true, 
     animation: google.maps.Animation.DROP 
    }); 
    markers[id] = marker; // cache created marker to markers object with id as its key 
    return marker; 
} 
var deleteMarker = function(id) { 
    var marker = markers[id]; // find the marker by given id 
    marker.setMap(null); 
} 
+0

Ho pensato lo stesso ma non riuscivo a capire come. Come posso ottenere l'id di un'istanza facendo clic sulla mappa per confrontarla con il mio array? – MrGorki

+0

"marker .__ gm_id" sembra l'id ma come posso rintracciarlo? di getElementbyId o qualcos'altro? Qualsiasi aiuto sarà molto apprezzato! – MrGorki

+0

Prima di tutto, non dovrei offrirti di usare un array perché quando usi la matrice, devi cercare l'indicatore nella matrice. Non c'è bisogno di questo mentre si utilizza un oggetto anziché un array. Il secondo è che puoi prendere la proprietà id del marcatore quando fai clic con il tasto destro del mouse sul marker, immagino tu sappia quale marker hai cliccato. Se lo sai, usa id per ottenerlo. Se non sai implementare un modo per farlo. Quindi la logica è così. – Fatih

2

complemento delle @Fatih rispondere è necessario gestire i marcatori. Ad esempio, è possibile aggiungere ciascun marcatore in una matrice e quindi per rimuoverlo, è possibile trovare questo indicatore nella matrice e impostare la val nella mappa null.

1

questo ha funzionato per me:

un secondo CurrentID, se si dispone di una migliore idea, fatemelo sapere

var actualMarkerId = 0; 
var currentId = 0; 



    if (actualMarkerId>0) { 
     deleteMarker(actualMarkerId); 
     console.log(actualMarkerId); 
    } 
    var id = uniqueId(); // get new id 
    actualMarkerId = id; 
0

Per modifiche minime

var newid=0; 

for (var index in results){ 

var marker = new google.maps.Marker({ 

map: map, 
icon: image, 

__gm_id: = newid+1, 

}); 
} 

Ora marcatore [ '__ gm_id' ] ha ancora un valore

2

Basta passare il tuo indicatore nella funzione tasto destro. Per esempio:

var marker = new google.maps.Marker({ 
    position: event.latLng, 
    map: map, 
    draggable: true, 
    title: 'Hello World!' 
}); 
google.maps.event.addListener(marker, "rightclick", function (point) {delMarker(marker)}); 

e rendere la funzione di guardare questo:

var delMarker = function (markerPar) { 
    markerPar.setMap(null); 
} 

I suoi marcatori saranno rimovibile sulle rightclicks.

Problemi correlati