gpt4 book ai didi

python - 将 MultiDiGraph 转换为 MultiGraph,而不丢失现有边

转载 作者:太空宇宙 更新时间:2023-11-03 15:08:59 24 4
gpt4 key购买 nike

我正在使用 OSMnx 返回路线图,这些路线图在 networkx 中表示为 MultiDiGraph。

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](因为单向道路)。

我想将其转换为 MultiGraph,因此我运行 sg_u = sg.to_undirected() 来创建缺失的 sg[d][c]。但不幸的是,它也会覆盖现有的“反向”边缘。

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

sg[65283442][65283457] 的长度为 85.36(推测为米)

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

但运行 to_undirected() 后,两者的长度均为 41.62。

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

最佳答案

OSMnx有一个内置函数get_undirected处理将街道网络的 MultiDiGraph 转换为 MultiGraph 的怪癖。

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])

打印:

{0: {'from': 65283442,
'geometry': <shapely.geometry.linestring.LineString at 0x1a0c10b67b8>,
'highway': 'residential',
'length': 85.36240139096256,
'oneway': True,
'osmid': 8915222,
'to': 65283457},
1: {'from': 65283457,
'geometry': <shapely.geometry.linestring.LineString at 0x1a0c10b64a8>,
'highway': 'residential',
'length': 41.620571785809716,
'oneway': True,
'osmid': 8915224,
'to': 65283442}}

sgu 是一个多重图。正如您所看到的,它在这些节点之间保留了两条(即平行的)无向边以及每个节点的所有属性。

此外,是的,OSMnx 图边长为 in meters默认情况下。

关于python - 将 MultiDiGraph 转换为 MultiGraph,而不丢失现有边,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44394548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com