用Python获取和解析地图街道数据

问题描述 投票:0回答:1

如何获得描述街道互连和估计驾驶时间的图表,并使用 Python 对其进行解析?

作为练习,我正在尝试实现一个基本的 A* 规划器来绘制在地图上的两点之间导航的路线(即 TomTom、Garmin、Google Nav 等)。我可以模拟一些数据,但如果可能的话我想使用真实的地图数据。

我知道 Open Street Map,虽然他们允许将地图的小部分导出到 OSM XML 数据中,但我在寻找工具来轻松解析我可以使用的表单时遇到了困难。我发现了imposm,但除此之外就没有什么了。谁能推荐其他工具吗?

python xml dictionary planning openstreetmap
1个回答
0
投票

OSMnx Python 包提供了一个方便的接口,用于将 OpenStreetMap 数据下载为多图或有向图。只需几行代码,您就可以下载并可视化某个区域或某个地址附近的步行、骑自行车和驾车网络。

这是一个最小的例子:

import osmnx as ox import matplotlib.pyplot as plt # Suppose we want to navigate while walking in Times Square, NYC place_name = "Times Square, NYC, New York, USA" graph = ox.graph_from_place(place_name, network_type='walk') # Visualize the multi-graph using matplotlib (resulting image below) fig, ax = ox.plot_graph(graph, node_size=10, node_color='blue', edge_color='black', edge_linewidth=1, bgcolor='white') # Optionally, simplify the multi-graph into a directed graph directed_graph = ox.convert.to_digraph(graph)

根据 OpenStreetMap 数据绘制的时代广场步行路线

然后,您可以直接使用该图来开发 A* 规划器,或者将图包装在

StateSpaceSearch

 抽象类中,以便您的 A* 实现保持与问题无关的状态。要查找边成本,请考虑为每条边定义的字典中的 
"length"
 键。最后,作为您的规划器的潜在比较点,OSMnx 
提供 Yen Dijkstra 算法的内置实现。

© www.soinside.com 2019 - 2024. All rights reserved.