使用地心坐标系计算纬度,经度和高度的距离

时间:2009-11-07 17:45:34

标签: javascript math geospatial spatial

我已经在Javascript中实现了这个方法,我大概是2.5%,我想了解原因。

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

我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(c.f Pythagoras)。笛卡尔地心也被称为以地球为中心的地球固定。即它是一个与地球一起旋转的X,Y,Z坐标系。

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

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

有什么可以解释这个?我对Javascript的双重表示期待过多吗? (X,Y,Z数字非常大,但两点之间的差异非常小)。

我的另一种方法是使用Vincenty算法(或类似算法)计算WGS84椭圆体上的测地线,然后计算两个高度的欧几里德距离,但这似乎不准确。

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

我刚刚解决了似乎是问题的主要原因。在转换函数中,我的纬度和经度都是错误的。

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

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

谢谢大家!

答案 1 :(得分:0)

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

你抛出我从未听说过的单词,所以我假设你至少和我一样对测地距离计算有所了解。我记得很久以前涉及这个问题,而这样做的方法需要计算双曲线正弦和余弦来做“奇怪的”球面几何。如果你只是“做”欧几里德平面距离,一旦地球的曲率变得显着,你的距离就会消失。

所以......你在做罪恶吗?你的程序是在做指数和对数吗?如果没有,您可能会使用错误的公式。

那......这就是我对这个话题的全部了解。祝你好运!

答案 2 :(得分:0)

您可以使用Google Maps Api进行此类计算。我做过一次。