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

Javascript 使用地心坐标系计算从纬度、经度和高度的距离,javascript,math,geospatial,spatial,Javascript,Math,Geospatial,Spatial,我已经在Javascript中实现了这个方法,我大概有2.5%的人支持这个方法,我想知道为什么 我的输入数据是一组点,表示为WGS84椭球体上方的纬度、经度和高度。这些点来自马拉松比赛期间从安装在手腕上的GPS设备收集的数据 我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(c.f毕达哥拉斯)。笛卡尔地心说也称为地心说。i、 这是一个X,Y,Z坐标系,它和地球一起旋转 我的测试数据是马拉松比赛的数据,所以距离应该非常接近42.26公里。然而,距离约为43.4公里。我尝试过各种方法,但

我已经在Javascript中实现了这个方法,我大概有2.5%的人支持这个方法,我想知道为什么

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

我的算法是将每个点转换为笛卡尔地心坐标,然后计算欧几里德距离(c.f毕达哥拉斯)。笛卡尔地心说也称为地心说。i、 这是一个X,Y,Z坐标系,它和地球一起旋转

我的测试数据是马拉松比赛的数据,所以距离应该非常接近42.26公里。然而,距离约为43.4公里。我尝试过各种方法,但没有任何东西能改变结果超过一米。e、 我用NASA SRTM任务的数据替换了高度数据,我将高度设置为零,等等

使用Google,我在文献中找到了两个点,其中lat、lon、height已经被转换,而我的转换算法是匹配的

怎么解释呢?我是否对Javascript的双重表示期望过高?(X、Y、Z的数值非常大,但两点之间的差异非常小)

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


提前感谢您的帮助

Javascript的计算非常精确,所以我认为你的问题不在这里。当然不是2.5%左右的误差

你胡说我从没听说过的话,所以我想你至少和我一样精通测地距离的计算。我记得很早以前就涉猎过这一点,要做到这一点,需要计算双曲正弦和余弦,才能得到“奇怪”的球面几何。如果你只是“做”欧几里得平面距离,一旦地球的曲率变得显著,你的距离就会消失

所以。。。你是在宣传罪恶吗?你的程序在做指数和对数之类的事情吗?如果没有,您可能应用了错误的公式


那里。。。关于这个话题我只知道这些。祝你好运

我刚刚找出了问题的主要原因。在转换函数中,纬度和经度绕错了方向

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

我现在从我的算法得到42476.75,从球体得到42476.69。足够接近我的目的


谢谢大家

您可以使用谷歌地图Api进行这样的计算。我做过一次。

你能提供你正在使用的样本输入数组吗?@Sarge,我们真的需要查看数据,正如Darin所说。这甚至可能是马拉松比赛并不完全是42.26公里长!或者跑步者绕道;-)我不知道如何在这里发布文件,这里有很多要点。前2点:SRID=4326;线串(-123.371889330447 48.41895148070.2,-123.371935682371 48.41873868650592-0.6)地心欧几里德:14.067619675265561球体长度(WGS 84):23.9255789000969前5个点:SRID=4326;线串(-123.371889330447 48.41895148070.2,-123.371935682371 48.41873886650592-0.6,-123.372053951025 48.41857331224716 3,-123.372148666531 48.41838334400028 1.4,-123.37225516701 48.41213197304 3)地心欧几里德:62.76225910919548球体长度(WGS 84):87.4846191030089球体长度来自要求PostGis使用WGS84参数计算长度。通过检查源,此计算也使用高度。如果我使用球体长度或转换为通用横轴墨卡托来计算整个路线的长度,那么我得到的结果非常接近42.3km,这是可以接受的。很高兴你解决了你的问题(对不起,我忘记检查这个问题几个小时了),但下一次:不要在评论中发布上述数据;您可以编辑原始问题并很好地格式化输入。@Carl:实际上它只使用sin、cos、pow和sqrt。地心转换就在这里:你是不是在计算鼹鼠在这些点之间挖洞的距离,而不是蠕虫爬行的距离?我要去翻出我的公式书,看看这些公式与你引用的公式相比如何。好吧,我太深奥了:我放弃了。祝你好运如果你能发布你的解决方案的相关代码,这对其他人会有帮助:)我认为这是来自地图学——地图投影通常定义为东/北,这就像我们在小学学习的x,y约定。因此long/lat.I没有检查,但谷歌地图API不会考虑海拔高度。谷歌地图是二维的。