【问题标题】:Gps Track Detection AlgorithmGps轨迹检测算法
【发布时间】:2016-03-27 06:35:36
【问题描述】:

我正在开发一个 Android 应用程序,该应用程序将记录(使用 GPS)用户在他们的越野车上骑行的轨迹。完成骑行后,我希望能够分析这些数据并找到骑行的轨道。

我将轨道定义为两个十字路口之间的行驶区域。交叉点是两个或多个点,它们彼此足够接近,可以归类为一个点。显然,我需要为此确定某种阈值。

显然,我可以通过蛮力检查每个点与其他点来做到这一点,但我认为必须有一种更有效的方法。

有什么更好的方法吗?

谢谢各位。

【问题讨论】:

标签: java android algorithm gps


【解决方案1】:

Kalman filter 经常用于剔除错误(噪声)点并简化 GPS 轨迹和估计真实轨迹。 Wiki 页面看起来相当复杂,所以如果能找到一些关于轨道过滤的实用文章会很不错。

【讨论】:

    【解决方案2】:

    实用:

    1. GPS点必须按照你的骑行顺序,所以你只需要检查一些连续的点就可以了。
    2. 对于每个点,将其作为圆心,看看圆中有多少点,然后您可以将这些点组合成一个交点。
    3. 生成的交叉路口也将按照您的骑行顺序。

    【讨论】:

    • 如果您在骑行后期从不同轨道遇到同一个十字路口,这将如何发挥作用?
    • @user1381573 如果点是 (a1, a2, b1, b2, c1, c2, a1, a2),则生成的交点将是 (a, b, c, a)。认为 (a1, a2), (b1, b2) 和 (c1, c2) 彼此非常接近。
    【解决方案3】:

    对于像轨道简化(我称之为“streamplification”)这样的实时流来说:每次将 GPS 点添加到缓冲区(包括海拔) 您计算缓冲区中所有点到将缓冲区的第一个点与(新添加的)最后一个点连接起来的线段的最大 XTD(跨轨道距离)。如果具有最大 XTD 的点违反了您的最大容忍 XTD 误差(25m 给了我很好的结果),那么您在该点切割缓冲区,将其注册为要附加到流放大轨道的选定点,修剪尾随部分缓冲到那个切点,然后继续。在轨道的末端,缓冲区的最后一个点也被添加/刷新到溶液中。该算法足够轻巧,可以在 AndroidWear 智能手表上运行,无论您是慢动作还是快动作,或者长时间闲置在同一个地方,都能提供最佳输出。唯一重要的是你的赛道的形状。您可以走很多分钟/公里,只要您沿直线移动(在 +/- 允许的 XTD 误差偏差范围内的走廊),streamplify 算法将仅输出 2 个点:出口形式最后一条曲线和入口的点在下一条曲线上。

    也请查看此问答 Simplification / optimization of GPS track

    【讨论】:

      猜你喜欢
      • 2012-08-04
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-13
      相关资源
      最近更新 更多