从GPS数据计算最大速度


10

我有用于跟踪的原始GPS位置,并且需要获得最大速度。简单的方法(计算2点之间的速度,取最大值)会由于GPS的不精确性而给出无意义的大数字,该点会跳来跳去。您能建议一个好的现成算法来解决这个问题吗?


如果要点跳跃,您是说您在某个位置有多个点吗?问题的大部分听起来像是您对显示实时数据而不是对后处理感兴趣(出于准确性)。
Brad Nesom 2011年

如果您具有“原始” gps位置,则应通过所有方式使地面上的速度以节为单位,这是NMEA RMC字符串中的标准元素。
nagytech

Answers:


13

当然,要获得速度,您必须有时间。因此,您可以通过增加时间来在电子表格(如时尚)中按时间对点进行排序,并在{Time,X,Y}列中进行排序。

这是一个GPS单位几乎完成逆时针电路的示例:

旅行地图

这些点不是在相等的时间间隔内获得的。 因此,仅凭地图就不可能估计速度。 (不过,为了帮助您直观地看到这次旅行,我确保以几乎相等的时间间隔收集gps值,因此您可以看到这次旅行在两个中间点和终点处快速开始并变慢了。)

因为您对速度感兴趣,所以请计算连续行之间的距离以及时间差。 将距离除以时间差可得出瞬时速度估算值。 这里的所有都是它的。让我们看一下这些估计值与时间的关系图:

速度与时间的关系图

红色点表示速度,而灰色曲线表示粗略的平滑度,仅用于引导眼睛。如果您在GIS中使用电子表格或简单的数据汇总功能,则从图中可以清楚地看到最大速度的时间以及最大速度本身,并且到目前为止可以很容易地从数据中获得。但是,这些速度估计值令人怀疑,因为gps点显然在其中存在一些测量误差。

解决测量误差的一种方法是累积多个时间段之间的距离,然后使用这些时间来估算时间。例如,如果先前计算的{时间差,距离}数据是

d(Time) Distance
0.90        0.17
0.90        0.53
1.00        0.45
1.10        0.29
0.80        0.11

然后通过将每对连续的行相加来获得两个时间段的经过时间和总距离:

d(Time) Distance
1.80        0.70
1.90        0.98
2.10        0.74
1.90        0.40

重新计算累积时间和距离的速度。

一个人可以在任何数量的时间段内执行此计算,从而获得更平滑,更可靠的绘图,但要以较长时间段内的平均速度估算为代价。这是分别计算3个和5个时间段的相同数据的图:

速度与时间的关系图,3间隔计算

速度与时间的关系图,5间隔计算

请注意,最大速度如何随平滑量的增加而降低。这将永远发生。 没有唯一的正确答案: 平滑程度取决于测量的可变性以及要估计速度的时间段。在此示例中,您可以报告高达2.5的最大速度(基于连续的GPS点),但是由于GPS位置中的错误,这可能会有些不可靠。您可以根据五个周期的平滑时间报告最大速度低至2.1。


这是一种简单的方法,但不一定是最好的方法。 如果将GPS位置误差分解为沿路径的一个分量与路径垂直的另一个分量,我们会看到沿路径的分量不会影响所经过的总距离的估算值(前提是对路径进行了充分采样:不要“偷工减料”)。垂直于路径的分量增加表观距离。这可能会使估计偏向上方。但是,与典型的距离误差相比,GPS读数之间的典型距离较大时,偏差较小,并且可能补偿了GPS序列未捕获的路径中的微小摆动(即有些拐角处总是完成)。因此,除非GPS采样频率与路径“摆动”或GPS测量误差较大的频率相比非常低,否则可能不值得开发出更复杂的估算器来应对这些固有偏差。

作为记录,我们可以显示真实,正确的结果,因为这些是模拟数据:

真实速度与时间的关系图

将其与以前的曲线图进行比较可以看出,在这种特殊情况下,原始速度的最大值会高估真实的最大值,而五周期速度的最大值却过低。

通常,当以高频率收集GPS点时,最大原始速度可能会太高:它往往会高估真实的最大值。在任何实际情况下要说的更多,都需要对GPS误差的性质和大小,GPS采集频率以及基本路径的曲折进行更全面的统计分析。


2

这不是现成的脚本或算法。我在下图中显示的平均速度(以kph为单位)中做了什么:

  1. 直接在GPX文件上运行gpsbabel过滤器。
  2. 将GPX文件转换为GRASS中的栅格点。
  3. 运行r.neighbors以获取指定栅格窗口的平均速度。

我的平均单车速度


您能否阐明如何从一系列位置的栅格表示中获得速度
ub

您可以使用gpsbabel从GPX的跟踪点合成速度信息。 gpsbabel.org/htmldoc-development/filter_track.html。然后将此数据作为矢量点导入,并在GRASS中转换为栅格。我在此图像上使用了多个GPX。使用r.neighbors,我得到平均速度。
2011年

非常感谢您的解释。但是,如果gpsbabel已计算出速度,为什么要使用r.neighbors?难道不可以将一条路线上的速度与网格上足够接近的其他路线上的速度混合吗?同样,当GPS采集时间间隔不均匀时,速度平均也会产生偏差。例如,如果您在60秒内行驶60米,则每秒走一米,但是如果它在1秒内被分成10米,再在59秒内被分成50米(由于中点的位置误差为+9 m),平均速度为5.4 m / s:总高估了。
ub

@whuber,你是对的。对于此地图,我不是在寻找个体速度,而是在时间上寻找总速度。我所有的曲目都间隔1秒。
2011年

+1为创意解决方案。(我喜欢为显然的矢量问题找到栅格解决方案,但知道它们的局限性很好。)
whuber

1

由于您的GPS数据不准确,因此您只能估算最大速度。

您可以尝试通过不计算线段速度而是计算折线速度(平均速度)来计算误差,以最大程度地减少误差的影响。

您是否尝试过先清理数据(例如Douglas-Peucker)以仅保留最相关的点?


1
道格拉斯·皮克(Douglas-Peucker)并没有真正清除数据-它只是在尝试保持原始形状的同时删除了点,因此实际上甚至会使错误看起来更糟。
JaakL 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.