2013-09-02 48 views
11

cho một dự án nhỏ mà tôi đang thực hiện, tôi cần có thể đặt điểm đánh dấu trên bản đồ hình ảnh được hỗ trợ leaflet.js và cập nhật vị trí của điểm đánh dấu này , nếu nó bị kéo. Tôi sử dụng mã sau đây để thử điều này, nhưng nó không thành công. Tôi gặp lỗi 'điểm đánh dấu không được xác định'. Tôi không biết tại sao nó không hoạt động - có lẽ các bạn có thể giúp tôi không? ;)leaflet.js - Đặt điểm đánh dấu khi nhấp chuột, cập nhật vị trí khi kéo

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

Trả lời

23

Trong đoạn mã trên, điểm đánh dấu không được xác định tại thời điểm xử lý sự kiện được thêm vào. Hãy thử những điều sau đây mà người nghe dragend được bổ sung ngay sau khi tạo ra các 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); 
}; 

Bạn cũng bị mất tích một khung vào cuối L.Marker mới của bạn() dòng.

Bạn cũng đặt position vào một mảng trong cuộc gọi tới setLatLng nhưng đã là đối tượng LatLng.

+0

Tối nay, tôi đã đưa ra giải pháp gần như giống hệt nhau. :-) Cảm ơn bạn! – kirijanker

+1

Dunno phiên bản bạn đang sử dụng kẻ nhưng nó là 'marker.setLatLng ([position.lat, position.lng], ...' thay vì 'marker.setLatLng ([position], ...' now. – zatziky

+0

Tôi cập nhật câu trả lời với cách sử dụng chính xác .. tác giả không cần đặt 'vị trí' vào mảng bởi vì nó đã là một đối tượng' LatLng' là đầu ra của 'getLatLng()' và đầu vào 'setLatLng()' trên mỗi tài liệu Leaflet : http://leafletjs.com/reference.html#marker – nothingisnecessary

Các vấn đề liên quan