1

我的目标是使用 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 保留所有真实

编辑:将bbox 区域缩小到市中心并创建缺失边缘列表

4

1 回答 1

1

您正在下载两种不同的网络类型:walkall_private(这是默认设置),因此您将获得不同的网络。边缘似乎没有丢失,它们似乎是 1) 不可行走的边缘或 2) 断开连接的图形组件的一部分(因为您已将retain_all其设置为 default False

于 2019-03-14T15:37:23.720 回答