我正在尝试在 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.Marker
的 dragend
事件。如果您查看 documentation for that ,您会看到 dragend
事件会触发接收 DragEndEvent
, which only has distance
, type
and target
properties 的事件处理程序。没有 latlng
。这是预期的。
现在,target
的 DragEndEvent
属性是 L.Marker
实例。所以:
LatLng
的 DragEndEvent
,因为它甚至不存在 LatLng
的 L.Marker
,它是 target
的 DragEndEvent
。 你如何获得
LatLng
的 L.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/