小编典典

计算两个坐标之间距离的函数

all

我目前正在使用下面的功能,但它不能正常工作。根据谷歌地图,这些坐标之间的距离(从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/


阅读 70

收藏
2022-06-02

共1个答案

小编典典

您使用的是所谓的半正弦公式,它计算 乌鸦飞行
时球体上两点之间的距离。您提供的谷歌地图链接显示距离为 2.2 公里,因为它不是一条直线。

Wolfram Alpha 是进行地理计算的绝佳资源,并且还显示这两点之间的距离为 1.652
公里

行驶距离与直线距离(红线矿井)。

如果您正在寻找直线距离(如乌鸦文件),则您的功能正常工作。如果您想要的是驾驶距离(或骑自行车距离或公共交通距离或步行距离),您将不得不使用地图
API(GoogleBing是最流行的)来获取适当的路线,其中将包括距离。

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

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

2022-06-02