从 OSMnx for NetworKX 保存并重新加载加权图

Save and re-load a weighted graph from OSMnx for NetworKX

我正在使用 OSMnx 获取图形并添加一个新的边属性 (w3),表示每个边的自定义权重。然后我可以使用 NetworkX 和 'length'、'w2' 成功找到 2 点之间的 2 条不同的最短路径。一切正常,这是我的代码:

G = ox.graph_from_place(PLACE, network_type='all_private', retain_all = True, simplify=True,truncate_by_edge=False) ``` 
w3_dict = dict((zip(zip(lu, lv, lk),lw3)))
nx.set_edge_attributes(G, w3_dict, "w3") 
route_1 = nx.shortest_path(G, node_start, node_stop, weight = 'length')
route_2 = nx.shortest_path(G, node_start, node_stop, weight = 'w3')

现在我想将 G 保存到磁盘并重新打开它,以便稍后执行更多导航任务。但保存后:

ox.save_graph_xml(G, filepath='DATA/network.osm')

并重新打开它:

G = ox.graph_from_xml('DATA/network.osm')

我的自定义属性 w3 不见了。我遵循了文档中的 instructions 但没有运气。感觉好像我错过了一些非常明显的东西,但我不明白它是什么..

使用ox.save_graphmlox.load_graphml函数将save/loadfull-featuredOSMnx/NetworkX图to/from盘起来备用。保存 xml 函数的存在只是为了允许序列化为需要它的应用程序的 .osm 文件格式,并且有许多约束符合该格式。

import networkx as nx
import osmnx as ox
ox.config(use_cache=True, log_console=True)

# get a graph, set 'w3' edge attribute
G = ox.graph_from_place('Piedmont, CA, USA', network_type='drive')
nx.set_edge_attributes(G, 100, 'w3')

# save graph to disk
ox.save_graphml(G, './data/graph.graphml')

# load graph from disk and confirm 'w3' edge attribute is there
G2 = ox.load_graphml('./data/graph.graphml')
nx.get_edge_attributes(G2, 'w3')