地图匹配算法实践 - 编程思维

1 背景

如下图所示,1、2、3 这三个点是汽车的GPS定位结果,尽管汽车是在道路上,但定位结果与道路存在偏差。地图匹配(Map Matching)是指将行车轨迹的经纬度采样序列与数字地图路网匹配的过程,其本质上是平面线段序列的模式匹配问题( Alt等,2003)。

在实际应用中,GPS采样信号的质量会严重影响地图匹配结果:采样频率的降低、定位误差的加大、信号的丢失,都会使匹配的不准确性增加。这些情况在实际应用中经常出现。如何在这些情况下仍能保持较高的路径匹配准确率是个值得研究的问题。

2012年ACM SIGSPATIAL首次设立的竞赛,其内容就是地图匹配。三年前本人有幸和国防科大的杨岸然博士一同参加了该竞赛,收获良多。

2 地图匹配算法综述

2.1 以使用到的信息来划分

现有的算法可被分成四类:几何、拓扑、概率、高级。
a)基于几何的算法考虑GPS点与道路的几何信息,如距离、角度等;
b)基于拓扑的算法使用道路拓扑信息来控制;
c)概率方法通过考虑GPS点的概率;
d)高级的算法往往综合考虑使用全面信息,有卡尔曼滤波、模糊逻辑模型、隐式马尔可夫模型等等。

2.2 以考虑采样点的范围来划分

根据考虑采样点的范围,可分成局部/增量算法、全局算法。
a)局部/增量算法是贪婪算法,每次确定一个匹配点,下个点从已经确定的匹配点开始。这些方法根据距离和方向相似性来找到局部最优点或边。(在线匹配)
b)全局算法是要从路网中找到一条与采样轨迹最接近的匹配轨迹。为了测量采样轨迹和匹配轨迹的相似性,大多数算法使用“Frechet距离”或者是“弱Frechet距离”。还有时空匹配算法、投票算法等。(离线匹配)

2.3 以采样点的频率来划分

根据轨迹数据的采样频率,现有的地图匹配算法可分成:
a)高频采样算法(所有局部算法、部分全局算法如Frechet距离判别法等)
b)低频采样算法(ST-matching算法、IVVM算法

一般认为30s及其以上为低频采样,1s~10s为高频采样。

3 我们的训练数据

a)路网数据: Washington State U.S.A.(有128万条边 )
b)GPS数据:采样频率为1~30s,

4 采用的算法

使用ST-Matching算法(Lou等,2009),该算法是一种全局算法,能综合几何信息( GPS点与道路的距离)、道路拓扑信息(最短路径)、道路属性信息(每条道路的限速),具有精度高,稳定性好等优点。

4.1 准备候选集

4.2 确定权重

a)空间因素权重(Fs)

b)时间因素权重(Ft)

5 实验结果

6 技术实现要点

6.1 地图投影问题

问题:原始道路网数据的坐标与轨迹点的坐标并不在一个坐标体系下,不能直接进行计算!

解决方法:使用PRJ4地图投影库将两个数据投影到统一坐标下。

6.2 大路网信息数据量的读取

问题:该路网有128万条边,我们采用C++,如果读取每条边都进行new和delete操作,将执行128万次,效率极低!

解决方法:使用内存池技术。

6.3 最短路径算法的选择

问题:候选集不同层次的候选点之间都要计算最短路径,使用最常用的Dijkstra最短路径算法效率极低!

解决方法:使用启发式最短路径算法:A-star算法。

6.4 索引

问题:由于竞赛真实测试会使用很多不同的路网数据,所以建立索引没必要,但是计算某一GPS点的候选集时路网所有数据会参与计算,效率很低;

解决方法:计算某一GPS点的候选集时,先进行切片过滤,比如以该GPS点为中心,生成200m的正方形框,然后在该框里建立新的道路网,这时计算候选集时只需要与该框内的道路网数据计算。

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://segmentfault.com/a/1190000014403828

如何实现一个高效的拼音匹配库?解决多音字,首字母匹配等问题 - 编程思维

如果本文对你有帮助,麻烦点个star! pinyin-math本文同步发布在掘金 掘金--如何实现一个高效的拼音匹配库?首先看看列表效果: 再看看长多音字符串: 在线演示地址:http://laosep.top/pinyin-match/接下来讲讲实现探索微信的拼音匹配规则通过参考微信,分为两种情况,一种不包含多音

二进制究竟有什么用?齐姐带你看看那些好玩儿的「位操作」 - 编程思维

本篇终于讲到了齐姐文章里常常出现的分割线!计算机说到底就是 0 和 1,所有的数在内存中都是以二进制的形式储存的。而位操作,或者说位运算,就是直接对内存中的二进制位进行操作。位运算可以说是我们的基本功,今天这篇文章就从以下角度和大家一起玩转位运算。二进制究竟有什么用?原码 反码 补码7 种位运算当然了,位运算还有很多奇

根据背景色自适应文本颜色 - 编程思维

针对企业服务来说,最终用户往往需要更加细化的信息分类方式,而打标签无疑是非常好的解决方案。如果标签仅仅只提供几种颜色可能无法满足各个用户的实际需求。那么系统就需要为用户提供颜色选择。事实上我们完全无法预知用户选择了何种颜色,那么如果当前用户选择了黑色作为背景色,同时当前的字体颜色也是黑色,该标签就无法使用。如果配置背景

rxjs入门实践-各种排序算法排序过程的可视化展示 - 编程思维

Rxjs入门实践-各种排序算法排序过程的可视化展示 这几天学习下《算法》的排序章节,具体见对排序的总结,想着做点东西,能将各种排序算法的排序过程使用Rxjs通过可视化的方式展示出来,正好练系一下Rxjs的使用本文不会太多介绍Rxjs的基本概念,重点介绍如何用响应式编程的思想来实现功能 在线演示地址 源码 效果图 需

50 行代码的 html 编译器 - 编程思维

虚拟 DOM 几乎已经是现代 JS 框架的标配了。那么该怎样将 HTML 字符串编译为虚拟 DOM 呢?这样的编译器并不是什么黑科技,这里只用了不到 50 行 JS 就实现了一个。 Demo 在 HTML Toy Parser Demo 中,可以将输入的 HTML 字符串编译成虚拟 DOM 并渲染在页面上。这个玩具项目

掘金 - 编程思维

Deep Photo Style Transfer - 照片风格迁移算法 - 工具资源 - 掘金 This is a torch implementation of the paper A Neural Algorithm of Artistic Style by Leon A. Gatys, Alexander S.

纯css实现radio和checkbox实现效果 - 编程思维

radio-and-checkbox 纯CSS实现radio和checkbox实现效果 reset-radio 在开发PC端的项目时,经常会用到radio和checkbox组件,可是因为原生的样式相对来说不符合设计师的设计风格,所以我们可能会经常引用第三方的模块去实现,或者通过JS等其他方式去hack。这样相对来说增

基于vue多人聊天项目 - 编程思维

项目背景 公司平台要做一个通讯系统,本来是java 来做的后面改前端+PHP来做,所以就用VUE来做这个了。 github github地址 新人求star 技术栈 vue-axios vuex websocket sass css3 等... 已经完成进度 整体结构已经完成 好友列表完成 好

jerry和您聊聊chrome开发者工具 - 编程思维

Chrome开发者工具是Jerry日常工作使用的三大调试器之一。虽然工具名称前面带了个"开发者", 但是它对非开发人员仍然有用。不信? 用Chrome打开我们常用的网站,按F12,在Console标签页里看到这些信息,这些都是很老的梗了。 在网易云音乐上听歌,如果想保存到本地,不需要安装客户端,直接在Chrome开

h5拖放异步文件上传之二——上传进度监听 - 编程思维

  上一篇《H5拖放+FormData接口+NodeJS,完整异步文件上传(一)》,我们走通了拖放文件上传的整个流程,但离实际使用场景还有差距。这篇,我们来添加几个实际使用场景必要的功能,向实际使用再走一步。 添加功能 显示待上传文件列表; 支持移除待上传文件; 使用upload.onprogress显示上传进度;

仿支付宝滑块验证码效果的手机端实现 - 编程思维

为了加强验证功能,减少APP的被攻击。队长要求做一个支付宝的滑块验证效果。除了它外观和用户体验上的优秀外,它的安全性并未降低,通过对用户行为的分析保证了安全校验。 通过查找大多数案例都是PC端展示效果,在手机端并不能友好展示。于是参考一位CSND博主的文章进行了一些修改。 原文链接 CSDN-仿支付宝滑块验证码效果