查找 2 个节点之间的街道名称。 OSMnx
Posted
技术标签:
【中文标题】查找 2 个节点之间的街道名称。 OSMnx【英文标题】:Find name of a street between 2 nodes. OSMnx 【发布时间】:2020-08-27 07:34:28 【问题描述】:我想查找 2 个节点之间的街道名称。我做了一些研究,我认为使用 Networkx 是可能的。 按照这个问题的答案: OSMNx : get coordinates of nodes using OSM id
我可以看到,例如,找到一些节点的坐标,我只需要写 G.nodes[id]['x]。但是我尝试在这样的两条街道之间找到名称: (假设 G 是我的图)
G.nodes[id_src][id_dst]['name']
它返回这个错误:
KeyError: 667410900
我假设这个数字是节点的 ID。
如何获得街道名称?
【问题讨论】:
街道是模型中的边还是节点?我猜它们是边缘,那么你需要通过G.edges[(id_src, id_dst)]["name"]
访问它们
感谢您的回答,但它仍然有这个错误:ValueError: not enough values to unpack (expected 3, got 2)
我总是忘记 OSMNx 可以和MultiGraph
一起使用,所以试试G.edges[(id_src, id_dst, 0)]["name"]
是的,就是这个。谢谢!
【参考方案1】:
假设您的图表是按照交叉点/死角是节点而街道是图表中的边的方式构建的。您可以通过(见documentation)访问街道信息
G.edges[(id_src, id_dst)]["name"]
# or display all data, with all possible names
print(G.edges[(id_src, id_dst)])
对于OSMNx
,您使用MultiDiGraph
,您需要指定您想要的边缘,即,
G.edges[(id_src, id_dst, 0)]["name"]
# or
G.edges[(id_src, id_dst, 0)]["length"].
【讨论】:
如果我想找到一条边的长度,我应该用“lenght”替换“name”吗? 是的,应该可以。我已经扩展了我的答案以包括那个案例。 这个或类似的东西有没有可能找到节点之间的角度? 大概你可以从不同路口的经纬度来近似角度。或者,您可以检查 OSMNx 模型中可用的信息,这些信息可以直接用于节点或边缘,甚至只能通过方法调用获得。如果您自己无法解决,我建议您打开一个新问题。以上是关于查找 2 个节点之间的街道名称。 OSMnx的主要内容,如果未能解决你的问题,请参考以下文章