我有一个河网的shapefile,它具有流顺序和权重(与此流关联的垃圾总和)的属性。如何使用python和networkx模块计算下游权重的累积?
我在networkx中寻找合适的工具,但没有找到,或者我在参考文献中误解了一些东西。
答案 0 :(得分:0)
我已经使用算法祖先解决了这个问题。似乎可以使用节点并返回节点集,我们可以对其进行总结。这不是很方便,因为我们需要从流到节点获取权重,然后将它们从节点重新关联到流。但这确实有效。
import networkx as nx
import os
dir = r'd:\YandexDisk\Projects\Bali'
os.chdir(dir)
G = nx.read_shp(r'Rivers_network.shp')
nodes = nx.nodes(G)
edges = nx.edges(G)
total_dict = nx.get_edge_attributes(G, 'Total')
for node in nodes:
ancestors = list(nx.ancestors(G, node))
sum_weight = 0
for coords in ancestors:
for edge in edges:
if tuple([edge[0][0], edge[0][1]]) == tuple([coords[0], coords[1]]):
sum_weight += int(total_dict[edge])
print(sum_weight)
for edge in edges:
if edge[0] == node:
accum_edge = {edge: sum_weight}
nx.set_edge_attributes(G, accum_edge, 'Accum')
nx.write_shp(G, dir)