2013-09-02 11 views
11

per un piccolo progetto su cui sto lavorando, devo essere in grado di posizionare un marker su una mappa immagine alimentata con leaflet.js e aggiornare la posizione di questo marcatore , se viene trascinato. Io uso il seguente codice per provare questo, ma fallisce. Ricevo l'errore "marcatore non definito". Non so perché non funzioni, forse voi ragazzi potreste aiutarmi? ;)leaflet.js - Imposta marcatore sul clic, aggiorna la posizione sulla resistenza

function onMapClick(e) { 
    gib_uni(); 
    marker = new L.marker(e.latlng, {id:uni, icon:redIcon, draggable:'true'}; 
    map.addLayer(marker); 
}; 

marker.on('dragend', function(event){ 
    var marker = event.target; 
    var position = marker.getLatLng(); 
    alert(position); 
    marker.setLatLng([position],{id:uni,draggable:'true'}).bindPopup(position).update(); 
}); 

risposta

23

Nel frammento di codice sopra, il marcatore non è definito al momento dell'aggiunta del gestore eventi. Provate il seguente in cui si aggiunge l'ascoltatore dragend subito dopo la creazione del marcatore:

function onMapClick(e) { 
    gib_uni(); 
    marker = new L.marker(e.latlng, {id:uni, icon:redIcon, draggable:'true'}); 
    marker.on('dragend', function(event){ 
      var marker = event.target; 
      var position = marker.getLatLng(); 
      console.log(position); 
      marker.setLatLng(position,{id:uni,draggable:'true'}).bindPopup(position).update(); 
    }); 
    map.addLayer(marker); 
}; 

È Mancavano anche una staffa alla fine del vostro nuovo L.Marker) linea (.

È inoltre possibile inserire position in un array nella chiamata a setLatLng ma è già un oggetto LatLng.

+0

Stasera, ho trovato quasi la soluzione identica. :-) Grazie! – kirijanker

+1

Non so quale versione stavi usando, ma è 'marker.setLatLng ([position.lat, position.lng], ...' invece di 'marker.setLatLng ([posizione], ...' ora. – zatziky

+0

Ho aggiornato la risposta con l'uso corretto .. l'autore non ha bisogno di mettere 'position' in un array perché era già un oggetto' LatLng' che è l'output di 'getLatLng()' e l'input di 'setLatLng()' per i documenti del depliant : http://leafletjs.com/reference.html#marker – nothingisnecessary

Problemi correlati