我一直在寻找一种方法,将权重应用于OSMNX上的节点/交叉点本身,而不是边缘。有人知道或弄清楚包是否允许给节点赋予权重吗?
与Debjit Bhowmick的答案类似,您可以直接使用Networkx更有效地完成此操作:
import networkx as nx
import osmnx as ox
G = ox.graph_from_place('Piedmont, CA, USA', network_type='drive')
# create node weights
w = {k: 3 if v == 'turning_circle' else 1 for k, v in G.nodes(data='highway')}
nx.set_node_attributes(G, w, 'weight')
您需要从提取的OSMnx图中构造一个geodataframe
。因此,您可以添加一个额外的列,您可以根据您的首选标准分配权重。
在下面的例子中,我给所有的节点分配了一个1.0的权重,除了那些构成traffic_signal
的节点。对于这些,我指定了3.0的权重。
import osmnx as ox
G = ox.graph_from_bbox( -37.8051, -37.7915, 144.9548, 144.9666, network_type='drive')
nodes = ox.graph_to_gdfs(G, nodes=True, edges=False)
nodes['weight'] = 1.0
for i in range(0,len(nodes)):
if nodes['highway'].iloc[i] == 'traffic_signals':
nodes['weight'].iloc[i] = 3.0
print(nodes.head())
y x osmid highway geometry weight
1725216770 -37.804785 144.964815 1725216770 NaN POINT (144.96482 -37.80479) 1.0
2209383436 -37.794562 144.958250 2209383436 NaN POINT (144.95825 -37.79456) 1.0
137181198 -37.800589 144.965390 137181198 traffic_signals POINT (144.96539 -37.80059) 3.0
324235283 -37.798423 144.965710 324235283 NaN POINT (144.96571 -37.79842) 1.0
1954066453 -37.795703 144.956705 1954066453 NaN POINT (144.95670 -37.79570) 1.0