2013-09-02 34 views
11

dla małego projektu, nad którym pracuję, muszę umieć umieścić znacznik na obrazie mapy zasilanym leaflet.js i zaktualizować pozycję tego znacznika , jeśli zostanie przeciągnięty. Używam następującego kodu, aby spróbować tego, ale nie powiedzie się. Otrzymuję komunikat o błędzie "marker nie jest zdefiniowany". Nie wiem, dlaczego to nie działa - może moglibyście mi pomóc? ;)leaflet.js - Ustaw znacznik na kliknięcie, zaktualizuj pozycję na przeciągnij

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

Odpowiedz

23

W powyższym fragmencie kodu marker nie jest zdefiniowany w momencie dodania modułu obsługi zdarzeń. Spróbuj wykonać następujące czynności, gdzie słuchacz dragend dodaje natychmiast po utworzeniu Marker:

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

Miałeś też brakuje uchwytu na końcu swojego nowego L.Marker() linii.

Dodaje się również position do tablicy w wywołaniu do setLatLng, ale jest to już obiekt LatLng.

+0

Dziś wieczorem wymyśliłem prawie identyczne rozwiązanie. :-) Dziękujemy! – kirijanker

+1

Dunno której wersji używasz facetów, ale jest to 'marker.setLatLng ([position.lat, position.lng], ...' zamiast 'marker.setLatLng ([position], ...' now. – zatziky

+0

Zaktualizowałem odpowiedź z poprawnym użyciem .. autor nie musiał wstawiać 'position' do tablicy, ponieważ był to już obiekt' LatLng', który jest wynikiem działania 'getLatLng()' i wejście do 'setLatLng()' na dokumentację ulotek : http://leafletjs.com/reference.html#marker – nothingisnecessary