Может ли GRASS вычислить представление линейного графа входного графа?

10

Я заинтересован в вычислении линейного графа для входного графа, предпочтительно в GRASS, так как впоследствии я буду использовать другие инструменты сетевого анализа GRASS . Я не смог найти никаких ссылок на линейные графики в документах GRASS. Есть ли другой термин, который я должен использовать в своем поиске, или скрытая функция, которая создала бы такой график?

Для контекста:

линейный граф неориентированного графа G является еще одним графом L (G), который представляет смежность между ребрами G.

введите описание изображения здесь

Источник: http://en.wikipedia.org/wiki/Line_graph

Подземье
источник
1
Этот вопрос, вероятно, лучше опубликовать в списке рассылки grass-dev ...
markusN
Спасибо @markusN, сделано osgeo-org.1560.x6.nabble.com/…
Подземье
1
Единственная ссылка, которую я нашел в GRASS, - это функция d.linegraph , хотя входные данные должны быть числовыми данными. Я знаю, что это не сильно помогает, но, по крайней мере, мы знаем, что в GRASS есть что-то, что связано с линейными графиками :)
Джозеф
Правильно ли я понял это? Вы ищете что-то похожее на PostGIS pgr_createTopology, где у вас уже есть вершины, но вместо этого вы хотите создать ссылки, описанные в терминах двух идентификаторов вершин? Не могли бы вы проанализировать таблицу вершин PostGIS для создания сети, которую вы ищете?
Адриан
@Adrian Да, вершины в линейном графе можно идентифицировать по двум вершинам входного графа. Ребра в линейном графе представляют смежность между ребрами во входном графе. Возможно, это будет работать с PostGIS, как вы описываете, но если мне придется реализовать что-то с нуля, это не будет моим первым выбором.
Подземье

Ответы:

3

Если с Python все в порядке, то есть несколько хороших модулей Python, которые знают о линейных графиках. Одним из примеров является NetworkX (который я установил просто sudo pip install networkx).

Это не идеальный ответ, так как вам нужно написать немного кода. Сначала вы должны преобразовать свои данные в графические объекты NetworkX :

import networkx as nx
G = nx.Graph()
G.add_node( ... )
G.add_edge( ... )

Затем вы вызываете line_graphфункцию getX для вычисления линейного графика:

H = nx.line_graph(G)

И, наконец, вы конвертируете результат обратно во что-то полезное, повторяя H.edges()и H.nodes().

CSD
источник