两个经纬度点之间的距离

6
使用谷歌API返回的纬度和经度进行比较距离是否可以采用传统方式(两点之间的距离:d = sqrt(pow(lat2-lat1, 2) + pow(lon2-lon1, 2))),而不需要将其转换为米或其他单位吗?我只需要用它来比较一系列点中最接近参考点的点。例如:假设我们有两个(lat,lon)点:(40.2535425,22.88245345)和(40.2565795,22.8884539),我们想找到最接近(40.2335425,22.83245345)的点。使用上述代码查找距离是否可以?还是我们需要先找到每个点与参考点的距离,例如以米为单位(使用haversine公式或其他公式),然后再比较值?我问这个问题是因为我不知道谷歌API返回的纬度和经度的确切值!我的意思是它们不是度-分-秒吗?谢谢...

在谷歌上搜索“great distance” - 你应该能够将这些纬度和经度值传递给标准化函数,以获取地球表面上的距离。 - Randy
在地球两极附近,经度表现得很奇怪。在纬度+/-90度处,一度经度等于0距离。因此,我想毕达哥拉斯方法不能在任何地方都适用。 - cHao
如果你只是想找到最近的,就不要在计算中进行平方根运算。如果a<b,则aa < bb(假设你保持一切为正)。在实际需要距离值时再进行平方根运算。 - Pete Stensønes
2个回答

3
不行,因为经线会朝极点汇聚。如果您的点相对较接近,可以这样近似计算距离:
d = sqrt(pow(lat2-lat1, 2) + cos(lat1)*pow(lon2-lon1, 2))

如果需要更高精度的大距离计算,有几个花哨的公式可以计算大圆距离,但我觉得将其转换为单位圆上的三维坐标然后进行简单的勾股距离计算会更简单一些,接着使用2 sin-1d/2)将距离转换回角度(尽管我可以理解有些人可能会认为这不是更简单的方法,:-))。

有一个用于计算大圆距离的JavaScript公式,https://dev59.com/BHVD5IYBdhLWcg3wTJrF#27943。 - Gajus
“d” 可以以某种方式转换为米/英里吗?我问这个问题是因为我对事实感到困惑,即纬度有180度,但经度有360度,所以我认为“d”只能用于比较距离,而不能用于计算绝对距离...但如果“d”可以以某种方式转换,我会非常高兴 :) - ZioBit

1

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