如何获得描述街道互连和估计驾驶时间的图表,并使用 Python 对其进行解析?
作为练习,我正在尝试实现一个基本的 A* 规划器来绘制在地图上的两点之间导航的路线(即 TomTom、Garmin、Google Nav 等)。我可以模拟一些数据,但如果可能的话我想使用真实的地图数据。
我知道 Open Street Map,虽然他们允许将地图的小部分导出到 OSM XML 数据中,但我在寻找工具来轻松解析我可以使用的表单时遇到了困难。我发现了imposm,但除此之外就没有什么了。谁能推荐其他工具吗?
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 算法的内置实现。