地图匹配实践
原文链接:https://www.cnblogs.com/LBSer/p/4612031.html
1 背景
如下图所示,1、2、3这三个点是汽车的GPS定位结果,尽管汽车是在道路上,但定位结果与道路存在偏差。地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题( Alt等,2003)。
在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:采样频率的降低、定位误差的加大、信号的丢失,都会使匹配的不准确性增加。这些情况在实际应用中经常出现。如何在这些情况下仍能保持较高的路径匹配准确率是个值得研究的问题。
2012年ACM SIGSPATIAL首次设立的竞赛,其内容就是地图匹配。三年前本人有幸和国防科大的杨岸然博士一同参加了该竞赛,收获良多。本博文也就是对参加竞赛的工作做一个简要的总结回顾,想要代码参考的朋友可以在下面留下邮箱,并注明用途。
2 地图匹配算法综述
2.1 以使用到的信息来划分
现有的算法可被分成四类:几何、拓扑、概率、高级。
2.2 以考虑采样点的范围来划分
根据考虑采样点的范围,可分成局部/增量算法、全局算法。
2.3 以采样点的频率来划分
根据轨迹数据的采样频率,现有的地图匹配算法可分成:
b)低频采样算法(ST-matching算法、IVVM算法
一般认为30s及其以上为低频采样,1s~10s为高频采样。
3 我们的训练数据
4 采用的算法
使用ST-Matching算法(Lou等,2009),该算法是一种全局算法,能综合几何信息( GPS点与道路的距离)、道路拓扑信息(最短路径)、道路属性信息(每条道路的限速),具有精度高,稳定性好等优点。
4.1 准备候选集
4.2 确定权重
5 实验结果
6 技术实现要点
6.1 地图投影问题
问题:原始道路网数据的坐标与轨迹点的坐标并不在一个坐标体系下,不能直接进行计算!
解决方法:使用PRJ4地图投影库将两个数据投影到统一坐标下。
6.2 大路网信息数据量的读取
问题:该路网有128万条边,我们采用C++,如果读取每条边都进行new和delete操作,将执行128万次,效率极低!
解决方法:使用内存池技术。
6.3 最短路径算法的选择
问题:候选集不同层次的候选点之间都要计算最短路径,使用最常用的Dijkstra最短路径算法效率极低!
解决方法:使用启发式最短路径算法:A-star算法。
6.4 索引
问题:由于竞赛真实测试会使用很多不同的路网数据,所以建立索引没必要,但是计算某一GPS点的候选集时路网所有数据会参与计算,效率很低;
解决方法:计算某一GPS点的候选集时,先进行切片过滤,比如以该GPS点为中心,生成200m的正方形框,然后在该框里建立新的道路网,这时计算候选集时只需要与该框内的道路网数据计算。