我正在尝试在 Leaflet map 上获取拖放标记的经纬度。

但是,我不断收到 TypeError: event.latlng is undefined 错误。

这是我的全部代码:

var map = L.map('map');

googleStreets = L.tileLayer('http://{s}.google.com/vt/lyrs=m&x={x}&y={y}&z={z}',{
  maxZoom: 20,
  subdomains:['mt0','mt1','mt2','mt3']
}).addTo(map);

map.locate({
  setView: true,
  maxZoom: 16,
  watch:false,
  timeout: 60000,
  enableHighAccuracy: true
});
var marker;
var circles;

function onLocationFound(e) {
  var radius = e.accuracy / 2;

  if(map.hasLayer(circles) && map.hasLayer(marker)) {
    map.removeLayer(circles);
    map.removeLayer(marker);
  }

  marker = new L.Marker(e.latlng, {draggable:true});
  circles = new L.circle(e.latlng, radius);
  circles.bindPopup("You are within " + radius + " meters from this point").openPopup();;

  map.addLayer(marker);
  map.addLayer(circles);

  marker.on('dragend', function(event) {
    var mylat = event.latlng.lat
    var result = marker.getLatLng();
    console.log(mylat);
  });
}

当我看到控制台内部时,我看到了那个错误。

但是当我将这个 console.log(mylat); 更改为这个 console.log(result); 时,我在控制台中看到了纬度和经度,但它们的格式不是我想要的。

当我使用 console.log(result); 拖放代码标记时,这就是我在控制台中得到的:
 Object { lat=51.564025924107554,  lng=0.7077598571777344,  equals=function(),  more...}

有人可以就此提出建议吗?

提前致谢。

最佳答案

您正在收听 L.Markerdragend 事件。如果您查看 documentation for that ,您会看到 dragend 事件会触发接收 DragEndEvent , which only has distance , type and target properties 的事件处理程序。没有 latlng 。这是预期的。

现在,targetDragEndEvent 属性是 L.Marker 实例。所以:

  • 你做 而不是 想要 LatLngDragEndEvent ,因为它甚至不存在
  • 你想要 LatLngL.Marker ,它是 targetDragEndEvent

  • 你如何获得 LatLngL.Marker ?使用其 getLatLng() 方法。所以:
    marker.on('dragend', function(event) {
      var latlng = event.target.getLatLng();
      console.log(latlng.lat, latlng.lng)
    });
    

    working example

    关于javascript - 如何在 Leaflet 中获取 "dragend"事件的 LatLng?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40546294/

    10-12 15:44