Sử dụng Leaflet Js, có thể biết vị trí onclick của Marker (bỏ qua điểm neo) không?


11

Tôi có một đối tượng đánh dấu có chiều cao và chiều rộng cụ thể, và mặc dù nó đang chỉ một tọa độ duy nhất, biểu diễn trực quan của điểm đánh dấu trải dài nhiều pixel. Khi tôi nhấp vào biểu diễn trực quan của điểm đánh dấu, tôi muốn lấy tọa độ bản đồ bên dưới, nhưng thay vào đó tôi chỉ có quyền truy cập vào tọa độ lat / lng duy nhất được liên kết với điểm đánh dấu.

Câu trả lời:


12

Một mặt: bất cứ khi nào Leaflet xử lý sự kiện chuột (hoặc chạm), bạn có thể truy cập sự kiện DOM gốc trong thuộc originalEventtính của sự kiện.

Mặt khác: Đưa ra một sự kiện DOM (hoặc chạm) DOM, Leaflet có thể dịch thuật kỳ diệu clientXclientYcác thuộc tính của nó thành một thể hiện L.LatLngbằng cách sử dụng map.mouseEventToLatLng().

Kết hợp hai điều này lại với nhau và bạn có thể có một cái gì đó như:

marker.on('click', function(ev){
  var latlng = map.mouseEventToLatLng(ev.originalEvent);
  console.log(latlng.lat + ', ' + latlng.lng);
});

Kiểm tra tài liệu của Leaflet để biết các phương thức chuyển đổi khác, vì chúng có thể hữu ích.


Cảm ơn, điều đó đã lừa Tôi đã tính toán latlng dựa trên số pixel như sau:var latlng = self._map.containerPointToLatLng([event.originalEvent.clientX - vpWidthDifference, event.originalEvent.clientY - vpHeightDifference]);
DarkKunai99

7

Bạn luôn có thể truy xuất tọa độ từ bản đồ đối tượng Tờ rơi. Bạn có thể sử dụng một cái gì đó như thế này:

map.on('click', function(e){
  var coord = e.latlng;
  var lat = coord.lat;
  var lng = coord.lng;
  console.log("You clicked the map at latitude: " + lat + " and longitude: " + lng);
  });

Ở đây bạn có một ví dụ làm việc.


Hmm, thật lạ vì tôi đang chạy trên Caesium v1.25 và bất cứ khi nào tôi nhấp vào điểm đánh dấu, đối tượng sự kiện luôn chứa latlng của điểm neo đánh dấu, chứ không phải tọa độ thực của bản đồ như trong ví dụ của bạn.
DarkKunai99

Tôi chưa từng làm việc với Caesium, có lẽ Ivan hoặc trên cesiumthẻ có thể cho bạn câu trả lời tốt hơn.
ramiroaznar

Tôi xin lỗi, tôi muốn nói Leaflet (phiên bản v1.0 RC mới nhất)
DarkKunai99

Hãy nhìn vào câu trả lời của Ivan, nó sẽ giải quyết vấn đề của bạn. Của tôi như bạn đã nói đang sử dụng một phiên bản Tờ rơi rất cũ (tôi không biết tôi đã sao chép từ đâu).
ramiroaznar
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.