使用IONIC 2中的Javascript API计算两个点之间的距离

3
我想获取用户的当前位置并计算该位置与其他位置之间的距离。我正在使用这个教程:在Ionic 2中使用Google Maps创建附近地点列表。以下是代码:
let usersLocation;
Geolocation.getCurrentPosition().then((position) => {

   usersLocation = { lat :position.coords.latitude ,  lng : position.coords.longitude }
   locations.map((location) => {

    let placeLocation = {
      lat: location.latitude,
      lng: location.longitude
    };

    location.distance = this.getDistanceBetweenPoints(
        usersLocation,
        placeLocation,
        'miles'
    ).toFixed(2);
  });

});

问题是:usersLocation变量没有设置为当前用户位置的纬度和经度。你能帮我吗!

你的.then函数只有在成功调用getCurrentPosition时才会被使用。你应该有一个好的方法来捕获错误,使用error函数:https://developers.google.com/web/fundamentals/getting-started/primers/promises。当调用getCurrentPosition()时,error函数将帮助你确定可能发生的失败原因。我敢打赌,你正在调用getCurrentPosition()时遇到了错误,但却没有处理它。 - Steve Kennedy
我使用了上面链接中指示的方法,但它没有进入成功或错误的2种情况。我在另一个提供程序中调用getCurrentPosition()函数,它工作正常。 - mehdi
你的config.xml文件中是否有允许GPS权限的功能? - Steve Kennedy
不,它没有那个功能。 - mehdi
请确保您已经按照 https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-geolocation/index.html 的指引来启用GPS使用。 - Steve Kennedy
我把浏览器从Firefox换成了Chrome,然后它就可以工作了。 - mehdi
2个回答

13
calculateDistance(lat1:number,lat2:number,long1:number,long2:number){
    let p = 0.017453292519943295;    // Math.PI / 180
    let c = Math.cos;
    let a = 0.5 - c((lat1-lat2) * p) / 2 + c(lat2 * p) *c((lat1) * p) * (1 - c(((long1- long2) * p))) / 2;
    let dis = (12742 * Math.asin(Math.sqrt(a))); // 2 * R; R = 6371 km
    return dis;
  }

是的。乘以0.621371即可转换为英里。 - Esaith
所以,如果我将“dis”除以1000,我得到的值就是以米为单位的,对吗? - PhpCoder

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接