【问题标题】:Getting map coordinates from Leaflet.js?从 Leaflet.js 获取地图坐标?
【发布时间】:2018-11-14 04:38:16
【问题描述】:

我正在尝试使用 Leaflet 来获取用户右键单击的某处的地图坐标。我一直在浏览 Leaflet API,到目前为止,我发现我需要监听 contextmenu 事件并使用 mouseEventToLatLng method 来获取单击时的坐标。但是,当我浏览并调试我的代码时,我在任何地方都看不到可访问的 latLng 变量。我是否错过了对 API 的理解?

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

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

【问题讨论】:

  • 你想要的是让“coords”变量可以从任何地方访问?
  • 实际上,我希望从该函数中访问坐标。问题是当我运行代码时,控制台会给我一条错误消息,上面写着mouseEventToLatLng is not defined

标签: javascript leaflet


【解决方案1】:

你想要得到的是mousemove 事件。这基本上就是你的做法,

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

【讨论】:

  • 但是我的一个用例是通过右键单击地图来设置标记,这样我仍然可以使用左键来移动地图。如果我使用 mousemove 那么它会随着鼠标在地图上移动而不断重置标记。我对你的 sn-p 有什么误解吗?
  • @RandomlyKnighted 地图的mousemove 事件不会持续重置标记。您仍然可以使用左键单击来移动地图。这基本上是为了捕捉您的光标在地图上的位置并将其转换为latlng。然后,当您右键单击地图时,它应该只创建latlng 所在的标记..
  • 感谢您的帮助!
  • 遗憾的是,这似乎不再适用于 Leaflet 1.7.1
【解决方案2】:

右键单击事件的坐标应直接作为"contextmenu" 监听器的event 参数的latlng property 提供。

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

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

【讨论】:

  • 谢谢!这正是我想要的。
  • @Martin:似乎在 Leaflet v1.7.1 plnkr.co/edit/aCkd7oosk2cBS62u987654323@ 上运行良好
  • @ghybs 抱歉,此评论是针对上述答案代码的,不确定它是如何出现在您的答案中的。实际上,我以前也曾赞成过这个答案:-)
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多