我已经在 Javascript 中实现了这个方法,我大约 2.5% 出来了,我想知道为什么。
我的输入数据是一个点数组,表示为 WGS84 椭球上方的纬度、经度和高度。这些点取自马拉松比赛期间从腕戴式 GPS 设备收集的数据。
我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(参见毕达哥拉斯)。笛卡尔地心也称为地心地心固定。即它是一个随地球旋转的X、Y、Z 坐标系。
我的测试数据是马拉松的数据,所以距离应该非常接近42.26km。但是,距离大约为 43.4 公里。我尝试了各种方法,但没有什么能改变结果超过一米。例如,我用来自 NASA SRTM 任务的数据替换了高度数据,我将高度设置为零,等等。
使用谷歌,我在文献中发现了两点,其中 lat、lon、height 已被转换,并且我的转换算法是匹配的。
这有什么可以解释的?我是否对 Javascript 的双重表示期望过高?(X、Y、Z 数字很大,但两点之间的差异很小)。
我的替代方法是使用 Vincenty 算法(或类似算法)计算跨 WGS84 椭球的测地线,然后计算两个高度的欧几里得距离,但这似乎不准确。
在此先感谢您的帮助!