点击蓝字关注我们
交通数据中会有很多的轨迹数据,轨迹数据一般是按秒采集,所以轨迹数据的量都是很大的,但是在进行数据分析时,轨迹数据量太大会影响运算效率,而且很多轨迹点是没有必要分析的。所以需要对数据进行压缩,轨迹数据压缩技术的主要目标是在不影响轨迹数据精度的情况下减小轨迹数据的大小。本次推送介绍一下轨迹数据压缩的Douglas-Peucker(DP)算法。
首先看一下郑宇博士《computing with spatial trajectories》一书中对DP算法的介绍。
上图演示了Douglas-Peucker算法的前两个步骤。如图所示,在第一步(见图 (a)中,选择起点p0和终点p16,生成近似线段p0 p16。导出了从原始轨迹上的每个采样点到近似线段p0 p16的垂直欧几里德距离。由于某些垂直误差距离大于预先定义的误差距离阈值,因此选择与p0 p16偏差最大的采样点,即本例中的p9作为分割点。因此,在算法的第二步(见图(b))中,使用轨迹p0、p9、p16来近似原始轨迹。在这一步中,原问题被分成两个子问题,其中线段p0 p9是{p0, p1,…, p9}近似的子轨迹,而线段p9 p16则近似于另一个{p9, p10,…,p16}的子轨迹。
如图所示,在第一个子问题中,几个采样的位置点的垂直误差距离p0 p9大于预先定义的误差距离阈值。因此,选取与p0 p9偏差最大的采样定位点p5作为分割点,对分割子轨迹进行递归处理,直到所有采样定位点在误差阈值内与近似线段都有垂直距离。另一方面,在第二个子问题中,所有样本点到线段p9 p16的垂直距离都小于误差阈值。因此,没有必要进一步拆分。
以上就是书中对DP算法的说明,下面介绍DP算法具体的步骤:
(1)在轨迹曲线在曲线首尾两点A,B之间连接一条直线AB,该直线为曲线的弦;
(2)遍历曲线上其他所有点,求每个点到直线AB的距离,找到最大距离的点C,最大距离记为dmax;
(3)比较该距离dmax与预先定义的阈值Dmax大小,如果dmax
(4)若dmax>=Dmax,则使C点将曲线AB分为AC和CB两段,并分别对这两段进行(1)~(3)步处理;
(5)当所有曲线都处理完毕时,依次连接各个分割点形成的折线,即为原始曲线的路径。