我已经在Javascript中实现了这个方法,我大概是2.5%,我想知道为什么。
我的输入数据是一个点数组,表示为纬度、经度和WGS84椭球上方的高度。这些点数是从马拉松比赛期间手腕上的GPS设备收集的数据中获得的。
我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(c.f Pythagoras)。笛卡尔地心也被称为以地球为中心的固定地球。也就是说,它是一个X,Y,Z坐标系统,它与地球一起旋转。
我的测试数据是来自马拉松的数据,所以距离应该非常接近42.26公里。然而,距离大约是43.4公里。我尝试了各种方法,但没有任何方法能改变结果超过一米。例如,我用NASA SRTM任务中的数据替换了高度数据,我将高度设置为零,等等。
使用Google,我在文献中找到了两个点,其中lat,lon,height已经被转换,我的转换算法是匹配的。
有什么可以解释这一点?我对Javascript的双重表示期望太高了吗?( X、Y、Z数字非常大,但两点之间的差异非常小)。
我的另一种选择是使用Vincenty的算法(或类似算法)计算WGS84椭球体上的测地线,然后计算两个高度的欧几里德距离,但这似乎不准确。
提前感谢您的帮助!
发布于 2009-11-08 02:42:45
我刚刚找出了问题的主要原因。在我的变换函数中,我的纬度和经度绕错了方向。
年轻玩家的陷阱:点数据首先给出经度,而不是纬度。
我现在从我的算法得到42,476.75,从椭球体得到42,476.69。足够接近我的目的。
谢谢大家!
发布于 2009-11-08 01:54:33
Javascript的计算很容易就足够准确,所以我不认为您的问题来自于此。当然不是2.5%左右的误差。
你到处说我从来没听说过的话,所以我假设你至少和我一样精通测地距离计算我记得很久以前我就涉足过这一点,要做到这一点,需要计算双曲正弦和余弦来做“奇怪的”球面几何。如果你只是“做”欧几里得平面距离,一旦地球的曲率变得重要,你的距离就会偏离。
所以..。你在做hyp-sin's吗?你的程序是做指数和对数之类的吗?如果不是,您可能应用了错误的公式。
那里..。这就是我对这个话题的所有了解。祝好运!
发布于 2009-11-19 09:18:24
您可以使用Google Maps Api进行如下计算。我做过一次。
https://stackoverflow.com/questions/1693837
复制相似问题