【问题标题】:Calculate distance using GPS : How to consider accuracy differences使用 GPS 计算距离:如何考虑精度差异
【发布时间】:2013-08-14 19:28:51
【问题描述】:

我正在开发一个基于 GPS 计算距离的移动应用程序。我正在使用以下半正弦函数来计算距离。

var R = 6371; // Radius of the earth in km
      var dLat = deg2rad(lat2-lat1);  // deg2rad below
      var dLon = deg2rad(lon2-lon1); 
      var a = 
        Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
      var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
      var d = R * c; // Distance in km

我关心的是如何处理不同的定位精度值。

即,首先我得到一个精度为 30m 的位置,然后我得到一个精度为 150m 的位置。

为了获得更好的距离计算,我需要考虑/避免哪个位置进行距离计算?或者如何使用上述公式调整计算中的这些精度差异?

我希望得到专家的建议。

【问题讨论】:

  • dLat 和 dLon 的计算是错误的,因为点可能在赤道和北极上。例如,当 delta 相同但在北极距离 0 但在赤道时很大。要找到距离搜索点的 x,y,z 并计算弧角,只有在计算距离之后。简历:问题不准确。
  • @HighPerformanceMark 我询问何时获得最佳估计点之间的距离。我不断跟踪 gps 位置以计算距离。在此期间,我如何管理精度差异以获得最佳估计。
  • @Толя 你的意思是反足点吗?上面的haversine公式主要是有效的,但也有例外
  • @HighPerformanceMark 绝对不正确。 GPS 接收器必须实时报告。所以他们不能优化他们的过滤距离计算。每个 GPS 应用程序,在他的情况下,距离都需要它自己的过滤。 (高于 GPS 接收器内部过滤)
  • @Ajmal 如果您在 SO 上搜索,这里有如何使用不准确的 GPS 信号进行距离计算的答案。只是更努力地搜索。有一些简单的解决方案,适用于最基本的学校数学。 (haversien 是最复杂的部分);-)

标签: algorithm math gps geometry


【解决方案1】:

任何像您这样的已知公式或智能手机内置的 API 都足够精确,可以计算 GPS 位置到下一个位置的距离等小距离。

但主要的不是距离公式。
您需要过滤 GPS 位置,不应简单地计算从一个位置到下一个位置的距离。

否则,尤其是在低速运动时,您会总结出一条不准确的 GPS 轨迹曲折线。

【讨论】:

  • 完全正确,最常用的是卡尔曼滤波器。几乎所有语言都有十几种实现。这是过滤 gps 轨迹的快速有效的方法。如果您想走更准确的方式,您应该将您的轨迹与实际制图联系起来以匹配路线,然后通过去除“切入”的角落等,您可以获得更高的准确性。
  • @evilruff 是和否:如果您与制图链接,那么拐角处的距离是错误的,汽车行驶的距离比在制图学中建模为 90° 角的 90° 交叉路口更短,但是真车行驶的弯道短于 90° 角。如果您在地图上而不是附近的道路上行驶,情况会变得更糟......
  • 我同意,这就是我写的,它并不像它所问的那么容易。我开发 ECS/ECDIS 系统的时间大多是 5 年。人们只是经常看不到他们的问题的背景,希望有在某处是一个神奇的公式,这是不正确的..它首先取决于一项任务..因为例如,如果我们谈论的是 FleetManagement 的 VTS,那么 GPS 样本之间可能会有相当大的距离(假设我们正在谈论卡车行驶数千英里)..然后您还应该应用类似于“航位推算”的方法来估计实际距离..
  • @evilruff 有什么 ECS/ECDIS 系统?
  • 它们确实可以,并且解决方案是已知的,但是它们在球坐标上运行良好,直到您停留在某个地理位置内,然后您可以获得非常好的估计。但是,例如,如果它是一个海上舰队管理,你就不能那么容易逃脱......
【解决方案2】:

一般来说,这并不容易。正如评论“距离”中提到的那样,这方面可能会有很多不同的事情,具体取决于您的坐标。有几个地球椭圆“模型”,所以你应该考虑这一点,然后编写你的算法。

如果是 GPS,它是 WGS84 投影。如果您需要快速高效的解决方案,请查看 Proj4 库,该库将所有这些东西合并到自身内部,并绑定到几乎所有东西。

最好的方法是将坐标转换为米(但您应该考虑区域),然后使用直角坐标进行计算。你可能想看看here。它提出了几种解决方法。

不准确,但会在非极端位置和小距离上工作。 (永远不要使用任何合适的导航软件),但是..

10001.965729km = 90 degrees
1km = 90/10001.965729 degrees = 0.0089982311916 degrees
10km = 0.089982311915998 degrees

【讨论】:

  • 对-1有什么解释吗?
  • 你没听懂他的问题。而你的回答对他没有帮助。 GPS位置是WGS84,你不需要proj4来转换他的任务。
  • WGS84 仍然有区域,如果要进行适当的矩形变换,应考虑到这些区域。当然,您可以依赖某些假设,例如一定程度的距离,但这是非常近似的。根据您测量的星球上的位置,您将得到不同的结果..
  • WGS84 没有区域,UTM WGS84 有区域。出于各种原因,UTM 用于投影到平面中。但他可以计算球面。但这一切都无济于事。重点是 GPS 过滤。
  • 真的,你对 UTM 的看法是对的。但你应该同意有两个“步骤” - 1) 过滤和 2) 测量.. 简单的球面计算给你带来比矩形转换更大的错误
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 2010-11-09
  • 2022-12-21
  • 2012-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多