像Garmin和TomTom这样的导航系统一直让我着迷。我想实现小型地图/导航应用程序来尝试各种路径算法并扩展我对它们的了解。
这是一个两部分问题:
1.。)地图数据是如何存储的? - 当您拥有道路网络时,这些数据通常如何存储?保留哪些数据以便以后重现地图?每条道路是否存储为一系列改变方向的点?这些数据存储在哪种文件格式中?是否有公开可用的库来轻松解析这些文件?有没有人具体说明如何存储/表示地图/道路数据,这将非常有用。
2.。导航/路径 - 在此地图上进行基本路径数据(la Garmin)时,我的假设是正确的,它会被转换为有向图吗?每个道路交叉点是一个顶点与边缘权重顶点之间的距离?这就是我正在考虑的事情,所以我可以尝试一些基本的众所周知的路径算法,看看我得到了什么。
我在美国看到了this公开可用的地图数据,但我不确定它是如何表示的,以及它是否足够详细,以便能够构建我的有向图。< / p>
如果有人有任何信息我会很感激。你拥有的知识越多越好。
答案 0 :(得分:8)
之前的回复都涉及GIS系统。这不是PND(便携式导航设备)的工作方式。它们太简单了,无法运行桌面/工作站级GIS软件。
相反,PND存储的信息几乎与Simucal假设的一样。道路分为几个部分。这使模型更加简单。在段内,最大速度等属性不会更改。
出于规划目的,路段充当图表中的边缘。对于每个节点,都存储传入和传出节点。然后使用修改的A *算法完成计划。边缘权重通常不是距离,而是估计的行程时间(或TomTom个案例,实际测量时间)。
道路网络通常是层次结构,而正常的A *是一个缓慢的起点。当从一个城镇到另一个城镇旅行时,A *将花费过多的时间在整个城镇中爬行。然而,我们人类知道在长途旅行时最好使用高速公路。这就是他们为之而建的。 PND同样喜欢高速公路。而且由于高速公路很少见,这可以节省大量内存。
另一个优化是前向和后向搜索;你计划从两边走向某个中间点。这样做的最大好处是,如果你转弯错误,你可以从一个新的起点再次搜索。向后搜索树未更改,因为您的目标未移动。
答案 1 :(得分:6)
我不知道有关导航系统单元的细节,但在标准GIS世界中,地图数据基本上存储为多边形,线和点的集合,每个都由其坐标(以及使用的投影和一些其他参数)描述)。例如,最常见的格式之一shapefile是here,,基于数据库的格式标准是here。
我已成功使用此存储模型进行道路显示和路线计算,使用PostgreSQL,PostGIS和PGRouting。使用通常的图算法进行计算,并且以通用格式存储的数据也作为图形存储以允许其应用。我无法将这种体验推断到嵌入式设备,因为它们的计算能力有限,因此它们的可能性非常不同。他们很可能会预先计算很多东西。
对于有点不同的存储方法,请检查OpenStreetMap
答案 2 :(得分:2)
存储的确切方式取决于格式;有很多不同的GIS格式。 GDAL是一个优秀的免费图书馆,几乎可以阅读所有图书。
通常道路将作为“线图层”存储在文件中,这是一组带有附加元数据的折线。因此,每条道路都会有一系列顶点,并且根据数据的质量,它有望获得信息,例如它们是否单向,速度估计和某种连接ID。
是的,它们通常会转换为有向图来解决。边缘权重可以是距离,或者更有用的是,行进该边缘所花费的时间。
快速解决是预计算和存储空间之间的权衡(嵌入式设备可能需要在PC上进行不同的选择)。这里有一些非常有趣的算法。
答案 3 :(得分:2)
如果您想查看一些代码以了解路由应用程序的工作原理,请尝试查看从openstreetmap.org wiki链接的一些路由应用程序。 Navit和Gosmore都是开源的,特别容易设置。
Gosmore应用程序的开发人员Nic Roets写了一篇interesting post关于他代表你可能感兴趣的道路矢量数据的选择。如果您想了解一下Gosmore的实际运行情况,它是基于openstreetmap数据的yournavigation.org路由网站的后端。
答案 4 :(得分:1)
通常情况是,在GIS数据中,道路存储为带有附加元数据的折线。这对于在屏幕上显示它们很好,但是为了能够导航它们,您需要知道哪些是彼此连接的。因此,在元数据中,通常每个路段都有一个节点ID,因此您可以说“这是路段457,它从节点332到节点667”。因此,当您读入GIS数据时,您会将其表示为由弧连接的一组节点(即图形)。
如果元数据不可用,您可以推断出哪些道路具有相同的开始/结束坐标(这是一些不那么精彩的GIS数据的情况)。 “定向”位只意味着道路有方向 - 其中一些可以沿任一方向行进,但其他方向只是单向。
通过有向图找到路径的典型算法是Dijkstra算法;在实践中使用各种衍生物。基本上,这涉及沿着图的弧线从一个节点移动到另一个节点,因此您需要适当的数据结构来支持它。
希望有帮助...
答案 5 :(得分:-1)
为了以更多存储和有限分辨率为代价提高绘图速度,许多应用程序将使用地理参考栅格格式,例如GeoTiff。
鉴于Zich的评论相当坚定
“所有导航系统中的数据都在向量中,没有例外!”
我以为我会在上面添加一些内容。首先,我将导航系统定义为一个系统,可以根据您当前的位置帮助您到达目的地,通常是通过花费大量可能的替代路线并推荐成本最低的路线。可能的路线可能由运输方式决定,例如汽车停留在道路上,而山地行人则不然。路线的成本核算可能因运输方式和用户要求而异。汽车可能想要根据道路速度采取最快的路线,卡车可能想要最节省燃料的路线,山地步行者可能想要最安全的直接路线,船只或飞机可能想要避开危险天气系统的路线,同时还要最小化燃料成本和花费的时间
在最简单的层面上,地图和指南针是导航系统。用小屏幕,可缩放的栅格地图和GPS替换地图,您仍然拥有导航系统。大多数中低端海上导航系统仍以这种方式工作,图表代表海岸线,海底和GPS,为您提供位置,并回声探测深度。
在更先进的一端,自动机器人导航系统(如Mars Rover navigation system)动态生成DTM模型,作为短程导航的基础,卫星聚集DEM进行更长距离导航。
建议所有导航系统都像消费者Garmin或Tom Tom设备一样工作是一个相当天真的假设。 FWIW,许多现代Garmin设备还包括raster based DEM data,其中低成本GPS高度可能非常不准确。