计算两个坐标之间的距离的功能

Airikr:

我目前正在使用下面的功能,但无法正常工作。根据Google Maps,这些坐标之间的距离(从59.3293371,13.487747259.3225525,13.4619422)为2.2公里,而函数返回的则为1.6公里。如何使该函数返回正确的距离?

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = deg2rad(lat2-lat1);  // deg2rad below
  var dLon = deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d;
}

function deg2rad(deg) {
  return deg * (Math.PI/180)
}

jsFiddle:http : //jsfiddle.net/edgren/gAHJB/

伊桑·布朗(Ethan Brown):

您使用的是所谓的Haversine公式,该公式可计算出乌鸦飞行时球体上两点之间的距离您提供的Google地图链接显示的距离为2.2公里,因为它不是直线。

沃尔夫勒姆阿尔法(Wolphram Alpha)是进行地理计算的理想资源,并且两点之间的距离为1.652 km

驱动距离与直线距离(红线雷击)。

如果您正在寻找直线距离(如乌鸦文件),则说明您的功能正常运行。如果您想要的是行车距离(或骑车距离,公共交通距离或步行距离),则必须使用地图API(最受欢迎的GoogleBing)来获取适当的路线,其中包括距离。

顺便说一句,Google Maps API在其google.maps.geometry.spherical命名空间中提供了一种用于球面距离的打包方法(请查找computeDistanceBetween)。这可能比自己动手做更好(对于初学者,它使用更精确的地球半径值)。

对于我们中间的挑剔者,当我说“直线距离”时,我指的是“球体上的直线”,当然,它实际上是一条曲线(即大圆距离)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章