在椭球中找到两个坐标之间的距离?


Answers:


16

1
该页面上的公式似乎忽略了偏心率。他们认为地球是一个球体,而不是一个椭球体。
乔恩·布林赫斯特

以前,我总是使用一个库,该库在某些经纬度的长点之间具有已知距离,然后进行平均以计算任何未知点的距离。我会问几个人。
Wallbasher

嗯,第二个链接似乎具有正确的公式。谢谢!
乔恩·布林赫斯特

1
感谢您的回答@Wallbasher。但是,最好是答案可以独立存在。如果您也将相关的公式与答案一起发布,将会很有帮助。
RK

7

因此,您知道自己的两个纬度和经度

您可以为每个计算笛卡尔坐标:

xa = (Cos(thisLat)) * (Cos(thisLong));
ya = (Cos(thisLat)) * (Sin(thisLong));
za = (Sin(thisLat));

xb = (Cos(otherLat)) * (Cos(otherLong));
yb = (Cos(otherLat)) * (Sin(otherLong));
zb = (Sin(otherLat));

然后使用以下公式计算两者之间的大圆距离:

MeanRadius * Acos(xa * xb + ya * yb + za * zb);

这种简化的方法允许预先计算x,y和z值,这些值可以存储在数据库中,以进行有效的“ x英里内的点数”查询。

当然,这是假设一个完美的球体,并且地球甚至都不是一个完美的椭球体,因此精度仅会达到几米。


1
我还要指出“完美领域”。您应该意识到,此方法将根据您在地球上的位置为您提供不同程度的准确性。
TroutSlayer

@TrotuSlayer 对于大多数应用程序来说通常已经足够好了,并且在速度和准确性之间总是要取舍。如果需要提高精度,是时候把脚轮放出,或者假设地球在给定区域内是平坦的,并且2D距离就足够了。
罗兰·肖

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.