0

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

此代码有效,但我希望“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/ 也许这可以帮助阐明我在做什么/做错了什么。

4

1 回答 1

0

你从locationfound事件中得到 latlng。

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 事件不会立即调用,它是一个异步服务。因此,您必须在调用事件并找到用户位置后计算距离。

于 2019-12-09T12:06:45.587 回答