GPS漂移处理
GPS 轨迹点的漂移,最常见于当车辆进入隧道等 GPS 信号弱的区间时,本该位于区间内的 GPS 定位点却停留在入口处,而等到车辆驶出区间后,GPS 点又瞬移到出口处。这种情况下,我们利用 GPS 数据计算车速时会出现区间内速度为 0,出口处又严重超速的现象,且车辆定位不准确同样影响会空间分析的结果,因此,需要进行修正。
对于这类偏移,很直接的思路是将车辆看作以匀速通过区间,把 GPS 定位点按等间隔还原到轨迹上。首先需要找到 GPS 发生漂移的位置(出口处的第一个数据点),从该点向前倒推,将停滞在同一位置不动的点找出来。以它们与出口的距离作为待分配位移,以这些点的总间隔时间为待分配时间,求出通过区间的平均速度,最后根据时间戳为每个停滞点分配对应的位移。
1 | def tunnel_gps_rectification(points, cal_distance, t): |
函数的入参points
可以直接使用原始 GPS
轨迹序列,但在GPS定位精度不足或采样频率太低的情况下,有条件应考虑先对轨迹数据进行地图匹配,如使用基于隐马尔可夫模型的leuvenmapmatching等算法以获取精确的轨迹点位置和位移。
LPR与GPS的轨迹融合
LPR (License Plate Recognition) 数据样本量大但采样频率低,而 GPS 数据采样频率高但样本量少。因此我的一个 idea 是尝试融合两类数据,并用 LPR 数据还原出 GPS 轨迹的特征。但实际中将同一辆车的 GPS 与 LPR 数据按照时间戳进行直接拼接,往往会产生很多问题,比如在轨迹中出现异常的折返,如下图:
同样会导致速度计算的异常。有多种原因可能产生这种折返现象:
- LPR 系统与 GPS 系统的时钟不同步
- LPR
过车数据实际上记录的是车辆通过停车线的时间,而停车线位置与设备位置不完全相同
- 同上述原因,可能有车辆在路口停车时已经超出停车线,产生错误记录
由于 LPR 设备位置是稳定的,不存在像 GPS 的偏移情况,因此解决这个问题可以通过固定 LPR 记录的位置,而调整对应的时间戳,使得其与 GPS 数据更好地融合。算法的思路是以每条 LPR 记录的原始时间戳为中心,定义一个时间窗,并在窗内前后移动时间戳。最终,找到某个时间戳使得 LPR 数据点与其前后两个 GPS 数据点形成的折线距离最小(轨迹最顺滑),且 LPR 点到前后 GPS 点的两段平均速度与两个 GPS 点间的平均速度最为接近。
1 | def adjust_lpr_timestamp(lpr_timestamp, lpr_idx, gps_t, gps_point, lpr_point, cal_distance, tw=30): |