GeoCoordinate.GetDistanceTo在计算地球距离时使用了错误的半径?

4
我反编译了 System.Device.Location.GeoCoordinate.GetDistanceTo(...) 并发现它使用了 Haversine 公式,这个公式需要在计算步骤中指定地球半径。
在反编译代码中指定的半径是 6376500.0 米。
在 MSDN 中,GetDistanceTo 的 文档 中有以下备注:
Haversine 公式考虑了地球的曲率,但假设地球是一个球体而不是椭圆体。
Wikipedia 表示
几种不同的将地球建模成球体的方式都得出了平均半径为 6,371 千米。
此外,无论我搜索到哪里,我很少能找到将半径规定为 6,376.5 公里的人。
因此,尽管它们非常接近,GetDistanceTo 使用的是 6,376.5 公里,但广泛接受的半径为 6,371 公里。为什么会有差异?GetDistanceTo 的创建者是否找到一种更好的方法来近似地球的半径?

经过快速的谷歌搜索,看起来他们正在使用赤道上的半径(或者非常接近!) - Surfbutler
@Surfbutler 但是为什么?当Haversine公式假设地球是球形时,为什么不使用平均半径而使用最大半径呢?在任何情况下,使用最大半径会更好吗? - David S.
我怀疑只有编写该函数的微软开发人员才知道答案。 - Surfbutler
@Surfbutler可能会...也许这只是一种美好的愿望,但我希望这样一个广泛使用的库需要经过不止一个人的审核来决定常量和公式。 - David S.
1个回答

1

如果我的数学没错,这可能会导致高达34公里的差异。

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

也许你可以只使用/显示结果到2个有效数字,那么它就不会真的有影响了。


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