仅在特定位置使用 Osmnx 时无法从 OSM 获得正确的图表(摩德纳)
Unable to get the right graph from OSM when using Osmnx in just a specific location (Modena)
我的目标是使用 Osmnx 和 Networkx 生成从 A 点到 B 点的路由。路线代表步行和骑自行车的位移,所以我想忽略单行道。
为了实现这一点,我使用了参数:G = ox.graph_from_place(place, network_type='walk')
到目前为止,巴塞罗那 (ES) 和切塞纳 (IT) 的一切都运行良好。
现在我正尝试对摩德纳 (IT) 做同样的事情,但是当同时使用 network_type='walk'
network_type='cycle'
时我得到的图表不完整(见附件中的 png)。
获得完整 Modena 图的唯一方法是不指定 network_type
参数,但通过这样做,G 中的边仍会带来值 oneway = True
。因此,路由是不正确的,因为它考虑了单向街道。我尝试使用以下方法更改该值:
for u, v, key, data in G.edges(keys=True, data=True):
data['oneway']=False
我没有收到任何错误,但路由仍然不正确。
我在这里错过了什么?
Modena graph with no roads in city centre
expected routing vs wrong routing
编辑:附上代码片段:
- 检索图形而不指定网络类型和绘图
它与红色的单行道
- 检索网络类型为 walk 的图并绘制它
列出缺失的 OSMids 并将它们绘制为洋红色
place = {'city' : 'Modena', 'country' : 'Italia'}
#--------SOME BASIC SETTINGS FOR PLOTTING------
one_way = (0.863, 0.039, 0.173,1)
two_way = (0.243, 0.243, 0.243,1)
background = (0.973, 0.973, 0.973,1)
#--------PLOT GRAPH WITHOUT SPECIFYING THE NETWORK TYPE AND GET THE OSMIDs---------
G = ox.graph_from_place(place)
osmid_no_network = list([data['osmid'] for u, v, key, data in G.edges(keys=True, data=True)])
ec = [one_way if data['oneway'] else two_way for u, v, key, data in G.edges(keys=True, data=True)]
fig, ax = ox.plot_graph(G, bgcolor=background,
show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec, dpi=300)
fig.suptitle("Modena_no_network_type")
plt.show()
ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_no_network_type",
file_format="png", dpi=300, axis_off=True)
#--------PLOT GRAPH SPECIFYING THE NETWORK TYPE = WALK AND GET THE OSMIDs-------
H = ox.graph_from_place(place, network_type = 'walk')
osmid_network_walk = list([data['osmid'] for u, v, key, data in H.edges(keys=True, data=True)])
ec = [one_way if data['oneway'] else two_way for u, v, key, data in H.edges(keys=True, data=True)]
fig, ax = ox.plot_graph(H, bgcolor=background,
show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec, dpi=300)
fig.suptitle("Modena_network_walk")
plt.show()
ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_network_walk",
file_format="png", dpi=300, axis_off=True)
#--------GET THE OSMIDs LIST OF MISSING EDGES AND PLOT MISSING EDGES IN MAGENTA---------
missing_edges = [i for i in osmid_no_network + osmid_network_walk if i not in osmid_no_network or i not in osmid_network_walk]
print(missing_edges)
m_edges = (0.859, 0.180, 0.938, 1)
ec2 = [m_edges if data['osmid'] in missing_edges else two_way for u, v, key, data in G.edges(keys=True, data=True)]
fig, ax = ox.plot_graph(G, bgcolor=background,
show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec2, dpi=300)
fig.suptitle("Modena_missing_edges")
plt.show()
ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_missing_edges", file_format="png", dpi=300, axis_off=True)
编辑:添加了Retain_all png
Modena retain all true
编辑:减少了 bbox area to downtown and created list of missing edges
您正在下载两种不同的网络类型:walk
和 all_private
(默认设置),因此您将获得不同的网络。边缘似乎没有丢失,它们似乎是 1) 不可行走的边缘或 2) 断开连接的图形组件的一部分(因为您将 retain_all
设置为其默认值 False
。
我的目标是使用 Osmnx 和 Networkx 生成从 A 点到 B 点的路由。路线代表步行和骑自行车的位移,所以我想忽略单行道。
为了实现这一点,我使用了参数:G = ox.graph_from_place(place, network_type='walk')
到目前为止,巴塞罗那 (ES) 和切塞纳 (IT) 的一切都运行良好。
现在我正尝试对摩德纳 (IT) 做同样的事情,但是当同时使用 network_type='walk'
network_type='cycle'
时我得到的图表不完整(见附件中的 png)。
获得完整 Modena 图的唯一方法是不指定 network_type
参数,但通过这样做,G 中的边仍会带来值 oneway = True
。因此,路由是不正确的,因为它考虑了单向街道。我尝试使用以下方法更改该值:
for u, v, key, data in G.edges(keys=True, data=True):
data['oneway']=False
我没有收到任何错误,但路由仍然不正确。 我在这里错过了什么?
Modena graph with no roads in city centre expected routing vs wrong routing
编辑:附上代码片段:
- 检索图形而不指定网络类型和绘图 它与红色的单行道
- 检索网络类型为 walk 的图并绘制它
列出缺失的 OSMids 并将它们绘制为洋红色
place = {'city' : 'Modena', 'country' : 'Italia'} #--------SOME BASIC SETTINGS FOR PLOTTING------ one_way = (0.863, 0.039, 0.173,1) two_way = (0.243, 0.243, 0.243,1) background = (0.973, 0.973, 0.973,1) #--------PLOT GRAPH WITHOUT SPECIFYING THE NETWORK TYPE AND GET THE OSMIDs--------- G = ox.graph_from_place(place) osmid_no_network = list([data['osmid'] for u, v, key, data in G.edges(keys=True, data=True)]) ec = [one_way if data['oneway'] else two_way for u, v, key, data in G.edges(keys=True, data=True)] fig, ax = ox.plot_graph(G, bgcolor=background, show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec, dpi=300) fig.suptitle("Modena_no_network_type") plt.show() ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_no_network_type", file_format="png", dpi=300, axis_off=True) #--------PLOT GRAPH SPECIFYING THE NETWORK TYPE = WALK AND GET THE OSMIDs------- H = ox.graph_from_place(place, network_type = 'walk') osmid_network_walk = list([data['osmid'] for u, v, key, data in H.edges(keys=True, data=True)]) ec = [one_way if data['oneway'] else two_way for u, v, key, data in H.edges(keys=True, data=True)] fig, ax = ox.plot_graph(H, bgcolor=background, show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec, dpi=300) fig.suptitle("Modena_network_walk") plt.show() ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_network_walk", file_format="png", dpi=300, axis_off=True) #--------GET THE OSMIDs LIST OF MISSING EDGES AND PLOT MISSING EDGES IN MAGENTA--------- missing_edges = [i for i in osmid_no_network + osmid_network_walk if i not in osmid_no_network or i not in osmid_network_walk] print(missing_edges) m_edges = (0.859, 0.180, 0.938, 1) ec2 = [m_edges if data['osmid'] in missing_edges else two_way for u, v, key, data in G.edges(keys=True, data=True)] fig, ax = ox.plot_graph(G, bgcolor=background, show=False, close=True, fig_height=11, fig_width=11, node_size = 0, edge_linewidth = 0.1, edge_color = ec2, dpi=300) fig.suptitle("Modena_missing_edges") plt.show() ox.plot.save_and_show(fig, ax, save=True, show=False, close=True, filename = "Modena_missing_edges", file_format="png", dpi=300, axis_off=True)
编辑:添加了Retain_all png Modena retain all true
编辑:减少了 bbox area to downtown and created list of missing edges
您正在下载两种不同的网络类型:walk
和 all_private
(默认设置),因此您将获得不同的网络。边缘似乎没有丢失,它们似乎是 1) 不可行走的边缘或 2) 断开连接的图形组件的一部分(因为您将 retain_all
设置为其默认值 False
。