我正在开发一个 Android 应用程序,该应用程序将记录(使用 GPS)用户在他们的越野车上骑行的轨迹。完成骑行后,我希望能够分析这些数据并找到骑行过的轨道。
我将轨道定义为两个十字路口之间的行驶区域。交叉点是两个或多个点彼此足够接近,可以归类为一个点。显然,我需要为此确定某种阈值。
显然,我可以通过蛮力检查每个点与其他点来做到这一点,但我认为必须有一种更有效的方法。
有什么更好的方法吗?
多谢你们。
卡尔曼滤波器经常用于拒绝误差(噪声)点并简化 GPS 轨迹和估计真实轨迹。Wiki 页面看起来相当复杂,所以如果能找到一些关于轨道过滤的实用文章会很不错。
实用:
对于像轨道简化(我称之为“streamplification”)这样的运行中流是:您保留 GPS 传感器为您提供的点的小缓冲区,每次将 GPS 点添加到缓冲区(包括高程)时,您计算缓冲区中所有点到将缓冲区的第一个点与(新添加的)最后一个点连接起来的线段的最大 XTD(跨轨道距离)。如果具有最大 XTD 的点违反了您的最大容忍 XTD 误差(25m 给了我很好的结果),那么您在该点切割缓冲区,将其注册为要附加到流放大轨道的选定点,修剪尾随部分缓冲到那个切点,然后继续。在轨道的末端,缓冲区的最后一个点也被添加/刷新到溶液中。该算法足够轻巧,可以在 AndroidWear 智能手表上运行,无论您是慢速还是快速移动,或者长时间闲置在同一个地方,都能提供最佳输出。唯一重要的是你的赛道的形状。您可以走很多分钟/公里,只要您沿直线移动(在 +/- 允许的 XTD 误差偏差范围内的走廊),streamplify 算法将仅输出 2 个点:出口形式最后一条曲线和入口的点在下一条曲线上。
检查此问答也 简化/优化 GPS 轨迹