在不丢失现有边的情况下将多有向图转换为多重图

2024-05-23 14:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用OSMnx返回路线图,在networkx中用多个有向图表示。在

import osmnx as ox
%matplotlib inline
sg = ox.graph_from_point((37.7936516, -122.4503161), distance=100, network_type='all_private')
ox.plot_graph(sg)

enter image description here

这将返回由六条边(灰色)连接的五个节点(蓝点)的图形。在

您会注意到两个节点有两条边连接它们(在右下方)。所以如果你看sg[a][b],你会得到一个与sg[b][a]不同的边。但是如果你拉sg[c][d],并不总是sg[d][c](因为单向道路)。在

我想把它转换成一个多重图,所以我运行sg_u = sg.to_undirected(),它创建了丢失的sg[d][c]。但不幸的是,它也覆盖了现有的“反向”边。在

如果查看“长度”属性,很容易看出:

sg[65283442][65283457]长度为85.36(m,推测)

sg[65283457][65283442]的长度只有41.62

但是在运行to_undirected()之后,两者的长度都是41.62。在

有没有简单地添加新的“反向”边而不是重新定义它?在


Tags: tofromimportnetworkx节点matplotlibasinline
1条回答
网友
1楼 · 发布于 2024-05-23 14:12:57

OSMnx有一个内置函数get_undirected来处理将街道网络的多有向图转换为多图的要求。

import osmnx as ox
%matplotlib inline
sg = ox.graph_from_point((37.7936516, -122.4503161), distance=100, network_type='all_private')
sgu = ox.get_undirected(sg)
print(sgu[65283457][65283442])

打印:

^{pr2}$

^{cd1>}是一个多图。如您所见,它在这些节点和每个节点的所有属性之间保留两条(即平行)无向边。

此外,是的,OSMnx图形边缘长度默认为in meters

相关问题 更多 >