2016-05-30 21 views
7

Tôi đang cố sử dụng Leaflet để có được tọa độ bản đồ của một nơi nào đó mà người dùng đã nhấp chuột phải. Tôi đã đi qua API Leaflet và cho đến nay tôi đã tìm ra rằng tôi cần phải nghe sự kiện contextmenu và sử dụng mouseEventToLatLngmethod để nhận tọa độ khi được nhấp. Tuy nhiên, khi tôi đi qua và gỡ lỗi mã của tôi, tôi không thấy biến latLng có thể truy cập ở bất kỳ đâu. Tôi đã bỏ lỡ hiểu điều gì đó trong API?Tìm tọa độ bản đồ từ tờ rơi

function setMarkers() { 
     document.getElementById("transitmap").addEventListener("contextmenu", function(event) { 
      // Prevent the browser's context menu from appearing 
      event.preventDefault(); 

      var coords = L.mouseEventToLatLng(event); 
     }); 
    }; 
+0

Những gì bạn muốn là làm cho "coords" biến accesible từ khắp mọi nơi? –

+0

Thực ra, tôi đang muốn truy cập các hợp âm từ bên trong chức năng đó. Vấn đề là khi tôi chạy mã giao diện điều khiển cho tôi một thông báo lỗi nói rằng 'mouseEventToLatLng không được định nghĩa'. – tylerbhughes

Trả lời

6

Điều bạn muốn nhận là mousemove sự kiện. Đây là cơ bản như thế nào bạn làm điều đó,

var lat, lng; 

map.addEventListener('mousemove', function(ev) { 
    lat = ev.latlng.lat; 
    lng = ev.latlng.lng; 
}); 

document.getElementById("transitmap").addEventListener("contextmenu", function (event) { 
    // Prevent the browser's context menu from appearing 
    event.preventDefault(); 

    // Add marker 
    // L.marker([lat, lng], ....).addTo(map); 
    alert(lat + ' - ' + lng); 

    return false; // To disable default popup. 
}); 
+0

Nhưng một trong các trường hợp sử dụng của tôi là đặt điểm đánh dấu bằng cách nhấp chuột phải vào bản đồ theo cách đó mà tôi vẫn có thể sử dụng nhấp chuột trái để di chuyển bản đồ. Nếu tôi sử dụng mousemove thì nó sẽ liên tục đặt lại điểm đánh dấu khi con chuột di chuyển xung quanh bản đồ. Tôi có hiểu nhầm điều gì đó về đoạn trích của bạn không? – tylerbhughes

+0

@RandomlyKnighted Sự kiện 'mousemove' của bản đồ sẽ không liên tục đặt lại điểm đánh dấu. Bạn cũng có thể sử dụng nhấp chuột trái để di chuyển bản đồ xung quanh. Điều này về cơ bản, là để nắm bắt vị trí con trỏ của bạn trên bản đồ và dịch nó thành 'latlng'. Sau đó, khi bạn nhấp chuột phải vào bản đồ, nó chỉ nên tạo điểm đánh dấu nơi 'latlng' là .. – choz

+1

Cảm ơn đã giúp rất nhiều! – tylerbhughes

3

Các tọa độ của sự kiện click chuột phải nên được trực tiếp có sẵn như là latlng property của event lập luận của "contextmenu" nghe.

map.on("contextmenu", function (event) { 
    console.log("Coordinates: " + event.latlng.toString()); 
    L.marker(event.latlng).addTo(map); 
}); 

Demo: http://plnkr.co/edit/9vm81YsQxnkAFs35N8Jo?p=preview

+0

Cảm ơn! Đó chính xác là những gì tôi đang tìm kiếm. – tylerbhughes

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