查找 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的主要内容,如果未能解决你的问题,请参考以下文章

OSMnx:节点之间的角度

查找 2 个树节点之间的路径

OSMnx:有没有办法找到两个坐标之间的准确最短路径?

python 包介绍:osmnx

如何在 Linux 集群上查找节点的名称

MYSQL 查询树形结构数据,查询某个节点下的所有子节点数据。