2011-04-04 172 views
6

使用从google apis返回的经纬度而不是任何转换为​​米或某种东西的经典方式(两点之间的距离:d = sqrt(pow(lat2-lat1, 2) + pow(lon2-lon1, 2)))比较距离是否可行?我只是为了比较才找到从一系列点到参考点的最近点。例如:两个经纬度之间的距离

比方说,我们有两个(纬度,经度)点:(40.2535425,22.88245345)和(40.2565795,22.8884539) ,我们想找到女巫是最接近(40.2335425,22.83245345)。可以使用上面的代码来找到距离吗?或者我们需要找到距离,让我们以米为单位(使用半正数公式或其他),首先从参考点开始计算每个点,然后比较这些值?

我问这个问题,因为我不知道google apis返回的值究竟是lat,lon!我的意思是他们不是德敏秒吗?

谢谢...

+0

谷歌“千里” - 你应该能够将这些纬度长值传递到标准化功能相处的距离地球表面。 – Randy 2011-04-04 12:23:03

+0

靠近两极,经度行为很有趣。纬度+/- 90度,经度== 0度。所以我想象毕达哥拉斯的方式无处不在。 – cHao 2011-04-04 12:28:32

+0

如果你刚才在最接近的时候不要在计算中做平方根。如果a 2011-04-04 12:33:03

回答

1

不,因为经线会聚到两极。如果你的观点比较接近,可以近似这样的距离:

d = sqrt(pow(lat2-lat1, 2) + cos(lat1)*pow(lon2-lon1, 2)) 

如果需要长距离更高的精度,有计算great-circle distances几个花哨的公式,但我觉得它简单转换为3D坐标在一个单位圆上,然后做一个简单的毕达哥拉斯距离,然后2转换回一个角度(虽然我可以理解,有些人可能会发现而不是找到这个更简单, - : - - )。

+0

有一个用于计算大圆距离的JavaScript公式,http://stackoverflow.com/a/27943/368691。 – Gajus 2013-04-30 10:20:42

+0

“d”能以某种方式以米/英里的速度变化吗?我在问,因为我感到困惑的是,由于纬度为180度而经度为360度,我认为“d”只能用于比较距离,而不用于计算绝对距离......但是我会非常高兴如果“d”可以以某种方式改变:) – ZioBit 2015-10-26 13:54:19

相关问题