Рассчитать накопление веса для каждого ребра в ориентированном графе (речная сеть) - PullRequest
1 голос
/ 23 марта 2019

У меня есть шейп-файл речной сети с атрибутами порядка и веса потока (сумма мусора, связанного с этим потоком).Как рассчитать накопление весов в нисходящем направлении, используя модуль python и networkx?

Я искал подходящий инструмент в сети x, но не нашел или, возможно, у меня что-то неправильно понято в ссылках.

1 Ответ

0 голосов
/ 24 марта 2019

Я решил эту проблему, используя алгоритм Ancestors.Кажется, что он работает с узлами и возвращает набор узлов, который мы можем суммировать.Это не очень удобно, потому что нам нужно получить весовые коэффициенты от потоков к узлам, а затем связать их обратно от узлов к потокам.Но это действительно работает.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...