【问题标题】:Modified Douglas-Peucker (TD-TR) implementation修改后的 Douglas-Peucker (TD-TR) 实施
【发布时间】:2026-02-14 08:15:02
【问题描述】:

Douglas-Peucker 算法是一种线泛化算法,它递归地从原始 GPS 轨迹点集中选择点。

但该算法不适用于 GPS 轨迹数据,因为需要同时考虑空间和时间数据,而 DP 只考虑空间谓词。

有几种 DP 实现,例如:

1) https://pypi.org/project/rdp/

2)https://rdp.readthedocs.io/en/latest/

为了考虑时间范围,还有另一种称为修正道格拉斯-普克 (TD-TR) 的算法。 TD-TR 方法使用 DP 算法,而且还考虑了时间。特别是,它将 DP 中使用的欧几里德距离替换为一种时间感知型,称为同步欧几里德距离 (SED)。

我想知道这个算法是否有一些实现。

【问题讨论】:

  • Douglas-Peucker 算法通过省略垂直距离最远的点来减少轨迹中的点数。因此,每个剩余点都属于原始轨迹,并具有其原始时间信息。为什么需要重新计算/修改时间数据?您能否附上提到的 TD-TR 论文的链接?
  • 感谢@AxelKemper 的回复。请看:cs.albany.edu/tech-reports/2010/SUNYA-CS-10-06.pdf.

标签: algorithm


【解决方案1】:

original paperNirvana Meratnia 和 Rolf A. de By 的移动点对象的时空压缩技术)包含增强算法的伪代码,该算法对距离误差和速度施加了限制轨迹压缩误差。这是相关的,因为轨迹点的减少可能会导致观察到的速度出现误差。

可以在here找到一个 Python 实现。

【讨论】:

  • 就我而言,我只关心时空谓词而不关心速度。因此,在您对我上面的问题发表评论后,我有点困惑。为什么有人需要使用 TD-TR 算法,因为“每个剩余点都属于原始轨道并具有其原始时间信息。为什么需要重新计算/修改时间数据?”
  • 时间信息与每个原始点都是准确的。但是,移动速度(计算为位置距离除以时间差)不是。如果您只对时间和地点感兴趣,您可以使用标准算法并保持时间。
  • 是的,您可以修改标准的 Douglas-Peucker 代码。如果您将所有数据存储在 Waypoint 对象中,时间信息将立即可用。
【解决方案2】:

如果目标是获得具有恒定速度的直线段,这是否会简化为使用标准 DP 在 4D 表示 (x, y, z, t) 中找到直线段?

【讨论】: