我正在使用OpenStreetMap及其矢量道路网络,我想实现一个地图匹配器算法。

目前,我能够针对每个GPS位置检索最近的路段,并计算该位置到该路段的投影,就像在这张图片上一样(红色针脚是蓝色表示已映射的路段,绿色表示已映射的位置):



但是,由于GPS精度不足,有时映射位置会从该段跳到另一个

我当前的算法是非常基本的:从纯GPS位置开始,我得到最近的路段,并确定映射的匹配位置在该位置。我知道这真的可以改善。

我可以想象将车辆方向考虑在内会改善地图匹配,但是您知道其他方法可以使我改善地图匹配器吗? br />
我要寻找任何链接和/或开源软件吗?

评论

您可以添加一个圆圈-Google使用单元格接收并创建一个淡蓝色的圆圈以显示您的大概位置。您的应用看起来不错,工作很好。如果您有矢量数据,则可以捕捉到距GPS点最近的线-请参阅Paul Ramsey的博客blog.cleverelephant.ca/2008/04/snapping-points-in-postgis.html

您要查找的关键字是“地图匹配”。大主题。

Uffe是正确的,地图匹配。查看本文以了解一些方法:cens.ucla.edu/~mhr/cs219/maps/white00.pdf

谢谢! lexicore,当我键入此文件时,纸张正在发送到我的打印机。是时候获得概述了。谢谢您的链接。

通过尝试捕捉到实际道路而不是仅顶点,我将改进算法。

#1 楼

正如您已经在做的那样,将点投影到直线上可以直接在PostGIS中完成。
我写的是一段时间以前的,在这里

但是,当点比正确的分段更靠近错误的分段时,要解决您的问题,也许这是一种可行的方法。


构建点的线串
尝试算法中建议的解决方案以匹配线段以匹配整条线,而不是逐点地匹配


评论


感谢您的回复。投影没问题:我已经在做投影了(不是通过ST_Closest进行的,因为它在我正在使用的空间位置上不可用,但没关系)。我也只是查看您提到的问题,并了解了可能有趣的“ Hausdorff距离”的存在。

– yonel
2011-2-3 14:58

#2 楼

在阅读了您的问题和各种答案之后,我对该问题产生了兴趣。
在对地图匹配算法进行了一些阅读之后,我了解了以下内容: >要使gps位置与道路匹配,您需要使用矢量格式的实际道路数据
,如果您对不同道路具有不同的权重,这将很有帮助。因此,与高速公路相匹配的点的机率更高,然后与边线相匹配的机率也更高。例如,如果gps点很长时间以来一直与侧车道相匹配,则应将其考虑在内,而不是直接与高速公路相匹配。
-实际匹配是使用多种统计技术完成的。

为进一步阅读,我建议以下内容:


低采样率GPS轨迹的地图匹配
一些个人的地图匹配算法导航
助理
GIS中的三步通用地图匹配方法
环境:旅行/运输研究视角


评论


是的,我也正在阅读并开始尝试实现一个可以扩展的简单算法。到目前为止,我已经从OSM下载了一些数据,并且正在研究如何为自己的目的最好地存储(和访问)数据。我认为这是一个有趣的话题。 :)我将在工作正常后更新此问题。另外,感谢您的链接!

– scrrr
13年4月19日在7:36



使用权重时要小心,“因此,与高速公路相匹配的点的机率会更高,然后与边线相匹配的机率会更高。” ...这取决于输入数据,可能会出错。

– Underdark♦
13年7月13日在11:04

@Devdatta,第二个链接上显示404。除了有我自己编辑以外,您还有其他链接吗?

–周
2015年4月21日在7:29

我没有该文章的免费访问链接。但是,如果您处于学术环境中。快速搜索后,该文章应该可用

–德夫达塔(Devdatta Tengshe)
2015年4月21日在8:22

@Chau:我在以下位置找到了PDF:researchgate.net/profile/Alain_Kornhauser/publication / ...

–德夫达塔(Devdatta Tengshe)
2015年4月21日在8:33

#3 楼

回答我自己的问题!

1-一个不错的.pdf,我刚刚发现了这个主题:

http://safari.ce.sharif.edu/file/2011-06-06/259 /2009_An%20off-line%20map-matching%20algorithm%20for%20incomplete%20map%20databases.pdf

,该链接还链接到文档中介绍的地图匹配器的C ++开源实现:
http://eden.dei.uc.pt/~camara/files/mgemma.zip
(这是一个离线地图匹配器,我的理解是,它使用WHOLE路径计算地图匹配位置为输入,并且无法在每个位置上即时执行。)2-然后,我已经深入阅读了此内容,在我看来,这真的很好:
https:// dspace.lboro.ac.uk/dspace-jspui/bitstream/2134/4860/1/velaga.pdf“为智能交通系统开发基于权重的增强型拓扑匹配算法”
算法得到了清晰的解释和权重调整值也在文档中提供。

#4 楼

关于Map-matching的工作很多,请参阅本文以简要回顾一些近期的工作(2007年之前)。最近,基于隐马尔可夫模型的方法在正常情况下似乎表现良好。例如,请查看2009年的这篇论文。这个想法和模型非常简单,即使您不熟悉HMM,也不应给您带来太多实施麻烦(在这种情况下,请不要慌张,有很多在线教程和简介集)

评论


刚刚意识到我在答案中提到的赤脚项目基于@Nick推荐的论文。

– nik
16年1月11日在13:45

#5 楼

该方法也称为“向量合并”。有一个专用的Wiki页面(http://wiki.openstreetmap.org/wiki/Conflation),其中提供了概述和列出(开源)软件包来执行道路矢量合并的程序,例如“ JOSM合并插件”,“ Potlatch 2合并”工具”,“ RoadMatcher”(适用于OpenJUMP)等。

评论


我一直认为合并是您使用两个线层进行的操作,而不是将点匹配到线上。真的一样吗?

– Underdark♦
13年7月13日在11:05

#6 楼

对于地图匹配算法,这取决于您需要实时还是脱机处理。在后一种情况下,最新的算法可以每秒处理1000点。内存需求当然取决于覆盖范围。为此,我们设法将行星的OSM道路网压缩在大约16 Gb上。具有高频或低频数据。当您的点相对较少时(例如,在城市环境中,每公里1个数据),这是路径推断,因为通常需要做一些假设才能猜测设备在哪里行驶。路径推断通常比较困难,但是对于现代设备/数据获取价格来说,问题就越来越少了。并能很好地处理浮动汽车数据。

评论


您可以扩展正在使用的算法吗?减小路网规模有何帮助?

–德夫达塔(Devdatta Tengshe)
13年6月8日在17:37

较少的覆盖范围=较小的网络可保留在内存中。这样可以加快计算速度。参考:trb.metapress.com/content/p31485vw72645686

–Fabrice Marchal
13年6月13日在8:14

#7 楼

在测试了前面提到的大多数框架之后,我发现了Barefoot并且可以推荐它。它使用隐藏的markov模型作为概率地图匹配方法(在其论文“将汽车放在地图上”中的详细信息)并以Java实现。它是开源的,由宝马的CarIT部门积极开发。

#8 楼

该主题称为地图匹配。但是,作为第一个非常好的近似值,可能只需对每个gps点查找最接近的点就足够了(无需进行任何校正就可以猜出正确的方式)。适用于iOS(更新:现在也适用于iOS),也没有功能全面的Android应用。但是您可以使用服务器版本来构建iOS应用,也可以使用离线Android演示作为开始。我已经在这里发布了地图匹配算法,只是一个粗糙的原型,但是效果出奇的好。

#9 楼

Strava Slide描述了道路网络上的累积轨迹数据如何表现得像“山谷”,以及拟议的路线如何像串珠一样“落入”。

#10 楼

尝试获取一些良好的测试数据。除了在目标设备上记录点之外,还使用其他更高精度的轨迹记录GPS。这将识别GPS和基础OSM数据中的错误。知道合理的阈值将使设计算法更加容易。

#11 楼




如果您可以获取您所在地区的道路数据,则可能对使用FOSS进行自动批量捕捉非常感兴趣。之后在您的PC上进行一些后处理,GRASS可能会有所帮助。

#12 楼

我发现一个API可以完成工作,而不必立即进行开发自己的解决方案。

他们使用OSM数据进行地图匹配。他们还提供了一个演示页面,允许您上传GPX文件,以查看其对您的效果如何。

#13 楼

您不必一定要提高数据质量。将拓扑算法与内存中的道路网络配合使用将大大改善匹配度。检查参考:http://trb.metapress.com/content/p31485vw72645686