3

我已经在 J​​avascript 中实现了这个方法,我大约 2.5% 出来了,我想知道为什么。

我的输入数据是一个点数组,表示为 WGS84 椭球上方的纬度、经度和高度。这些点取自马拉松比赛期间从腕戴式 GPS 设备收集的数据。

我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(参见毕达哥拉斯)。笛卡尔地心也称为地心地心固定。即它是一个随地球旋转的X、Y、Z 坐标系。

我的测试数据是马拉松的数据,所以距离应该非常接近42.26km。但是,距离大约为 43.4 公里。我尝试了各种方法,但没有什么能改变结果超过一米。例如,我用来自 NASA SRTM 任务的数据替换了高度数据,我将高度设置为零,等等。

使用谷歌,我在文献中发现了两点,其中 lat、lon、height 已被转换,并且我的转换算法是匹配的。

这有什么可以解释的?我是否对 Javascript 的双重表示期望过高?(X、Y、Z 数字很大,但两点之间的差异很小)。

我的替代方法是使用 Vincenty 算法(或类似算法)计算跨 WGS84 椭球的测地线,然后计算两个高度的欧几里得距离,但这似乎不准确。

在此先感谢您的帮助!

4

3 回答 3

1

我刚刚弄清楚了问题的主要原因。我的转换函数中的纬度和经度方向错误。

年轻球员的陷阱:点数据首先给出经度,而不是纬度。

我现在从我的算法中得到 42,476.75,从球体中得到 42,476.69。足够接近我的目的。

谢谢大家!

于 2009-11-07T18:42:44.807 回答
0

Javascript 在计算中很容易足够准确,所以我不认为你的问题来自那里。当然不是 2.5% 左右的误差。

你抛出了我从未听说过的词,所以我假设你至少和我一样在测地距离计算方面知识渊博。我记得很久以前就涉足过这个问题,而要做到这一点,需要计算双曲正弦和余弦来做“奇怪的”球面几何。如果你只是“做”欧几里得平面距离,一旦地球的曲率变得很大,你的距离就会消失。

所以...你在做hyp-sin的吗?你的程序是在做指数和对数之类的吗?如果不是,您可能应用了错误的公式。

那里......这就是我所知道的关于这个话题的全部内容。祝你好运!

于 2009-11-07T17:54:33.080 回答
0

您可以使用 Google Maps Api 进行这样的计算。我做过一次。

于 2009-11-19T01:18:23.700 回答