GeoCoordinate.GetDistanceTo 使用错误的地球半径?

Posted

技术标签:

【中文标题】GeoCoordinate.GetDistanceTo 使用错误的地球半径?【英文标题】:GeoCoordinate.GetDistanceTo using wrong radius for Earth? 【发布时间】:2013-10-02 13:03:49 【问题描述】:

我反编译了System.Device.Location.GeoCoordinate.GetDistanceTo(...),发现它使用Haversine公式,它应该指定地球的半径作为计算步骤之一。

反编译代码中指定的半径为6376500.0(米)。

在 MSDN 中,documentation for GetDistanceTo 有一个备注:

Haversine 公式解释了地球的曲率,但是 假设一个球形地球而不是一个椭球体。

***states那个

将地球建模为球体的几种不同方法,每一种都会产生一个 平均半径 6,371 公里

在我搜索的所有地方,我发现找不到任何人很少将半径指定为6,376.5 km。

因此,即使它们非常接近,GetDistanceTo 使用 6,376.5 km,但广泛接受的半径是 6,371 km。为什么有区别? GetDistanceTo 的创建者有没有找到更好的方法来近似地球的半径?

【问题讨论】:

在快速谷歌之后,看起来他们正在使用赤道的半径(无论如何都接近它!) @Surfbutler 但为什么呢?当 Haversine 公式假设地球为球形时,为什么不使用平均半径而不是最大半径呢?为什么使用最大半径会更好? 我怀疑只有编写函数的微软开发人员知道答案。 @Surfbutler 可能是......也许这是一厢情愿的想法,但我想这样一个广泛使用的库需要不止一个人来决定常量和公式。 【参考方案1】:

除非我的数学计算出来了,否则这可能会导致高达 34 公里的差异。

听起来很多,但只有额外的 0.17% 错误。

也许您只能在 2 个重要的地方使用/显示结果,那么这并不重要。

【讨论】:

以上是关于GeoCoordinate.GetDistanceTo 使用错误的地球半径?的主要内容,如果未能解决你的问题,请参考以下文章