Javascript leafletjs 获取用户位置以进行距离计算

Javascript leafletjs get user position for distance calc

我目前正在尝试创建一个地图应用程序,到目前为止地图加载和自定义信息和图标工作完美。但是,我想向用户显示到地图上标记的距离(距离)。

此代码有效,但我希望 "from" 变量是用户当前位置而不是预定位置。

var onePlace = L.marker([63, 20], {icon: thisIcon}).bindPopup('My text'),
    theOtherPlace = L.marker([65, 20], {icon: thatIcon}).bindPopup('My text');

var to = onePlace.getLatLng();
var from = theOtherPlace.getLatLng();
var distance = from.distanceTo(to);

为了设置用户在地图上的位置,我使用了他们的快速入门指南中的代码,看起来像这样

    primaryMap.locate({
    });

    primaryMap.on('locationfound', positionFound);
    primaryMap.on('locationerror', positionNotFound);

    function positionFound(e) { 

    var myPosition = L.marker(e.latlng, {
    }).addTo(primaryMap);
}    
    function positionNotFound(e) {
    alert(e.message);
}

但是后期如何拿到这里设置的位置是我比较纠结的问题

基本上我想要的就是这个

var myPos = [??].getLatLng();
var to = onePlace.getLatLng();
var distance = myPos.distanceTo(to);

第一次发帖,部分代码格式奇怪,请见谅。

无论如何,如果有人能帮助我,我将非常感激。一直坚持这个问题,似乎无法在文档中找到任何有用的东西(可能只是不太理解它,因为我对此很陌生)。

提前致谢!

更新:

jsfiddle:https://jsfiddle.net/xcyniic/98sy6zxb/27/ 也许这可以帮助阐明我在做什么/做错了什么。

您从 locationfound 事件中获取经纬度。

primaryMap.on('locationfound', positionFound);
function positionFound(e) { 
   var myPos = e.latlng;
   var to = onePlace.getLatLng();
   var distance = myPos.distanceTo(to); 
}

更新

要在外部获取 pos 值,您必须在外部创建变量并测试它是否不为空;

var myPos = null;
primaryMap.on('locationfound', positionFound);
function positionFound(e) { 
   myPos = e.latlng;
   calcDistances();
}


function calcDistances(){
   if(myPos){
      var to = onePlace.getLatLng();
      var distance = myPos.distanceTo(to); +

      var to2 = twoPlace.getLatLng();
      var distance = myPos.distanceTo(to2); 

      //...
   }
}

我觉得你想错了。 locationfound 事件不会立即调用,它是一个异步服务。所以你必须在调用事件并找到用户位置后计算距离。