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 使用错误的地球半径?的主要内容,如果未能解决你的问题,请参考以下文章