我的目标是使用 Osmnx 和 Networkx 生成从 A 点到 B 点的路线。路线代表步行和骑自行车的位移,所以我想忽略单向街道。
为了实现这一点,我使用了以下论点:G = ox.graph_from_place(place, network_type='walk')
到目前为止,对于巴塞罗那 (ES) 和切塞纳 (IT),一切都运行良好。
现在我正在尝试对 Modena (IT) 做同样的事情,但是在同时使用两者时我得到了一个不完整的图表network_type='walk'
network_type='cycle'
(见附件 png)。
获得完整的 Modena 图的唯一方法是不指定network_type
参数,但通过在 G 中执行此操作,边仍然会带来 value oneway = True
。因此,路由是不正确的,因为它考虑了单向街道。我尝试使用以下方法更改该值:
for u, v, key, data in G.edges(keys=True, data=True):
data['oneway']=False
我没有收到任何错误,但路由仍然不正确。我在这里想念什么?
编辑:附上以下代码片段:
- 在不指定网络类型的情况下检索图形并将其绘制为红色的单向街道
- 检索网络类型 = walk 的图并绘制它
列出丢失的 OSMid 并用洋红色标出它们
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 保留所有真实