我正在进行仿真,我想记录人行道上步距。
图:
G = ox.graph_from_bbox(35.00843, 34.99174, 135.78775, 135.77495, network_type='walk')
所需路径为:
ox.shortest_path(G, 305371702, 305371770)
然后我使用以下方法获取边缘数据:
edges = ox.graph_to_gdfs(G, nodes=False, edges=True)
edges=edges[['u','v','length']]
但是在最短路径中的某个步骤,我到达节点5327529704,事情变得很奇怪。当我在True
中获得该节点的G.nodes()
时,该节点的'edges'数据框为空:
edges[edges['u']== 5327529704]
当然还有一个错误:
edges[edges['u']== 5327529704].loc[edges['v']== 5327529686].length.iloc[0]
在最短路径中的两个节点之间怎么可能没有边缘?我在做什么错了?
答案 0 :(得分:0)
因此,我已经尝试使用:
G = ox.utils_graph.get_undirected(G)
但是那也没有解决。图我只需要检查两次,一次是起始节点在u
上,一次是在v
上。
不是我希望做的,但是现在我可以操纵数据以更好地满足我的目的。
答案 1 :(得分:0)
这一切似乎对我来说都很好...这是一个可复制的最小代码段:
import networkx as nx
import osmnx as ox
ox.config(use_cache=True, log_console=True)
# make the graph and get shortest path
G = ox.graph_from_bbox(35.00843, 34.99174, 135.78775, 135.77495, network_type='walk')
path = ox.shortest_path(G, 305371702, 305371770)
print(path)
# look up the length of a specific edge
edges = ox.graph_to_gdfs(G, nodes=False, edges=True)
edges=edges[['u','v','length']]
print(edges[edges['u']== 5327529704].loc[edges['v']== 5327529686].length.iloc[0])
# see that edge's attribute data in the graph itself
print(G.edges[(5327529704, 5327529686, 0)])
# get the lengths of each edge in the path
edge_lengths = ox.utils_graph.get_route_edge_attributes(G, path, 'length')
print(edge_lengths)