O GRASS pode calcular a representação do gráfico de linhas de um gráfico de entrada?

10

Estou interessado em calcular um gráfico de linhas para um gráfico de entrada, de preferência no GRASS, pois usarei outras ferramentas de análise de rede GRASS posteriormente. Não encontrei nenhuma referência a gráficos de linha nos documentos GRASS. Existe um termo diferente que devo usar na minha pesquisa ou uma função oculta que criaria esse gráfico?

Para o contexto:

o gráfico de linhas de um gráfico não direcionado G é outro gráfico L (G) que representa as adjacências entre as arestas de G.

insira a descrição da imagem aqui

Fonte: http://en.wikipedia.org/wiki/Line_graph

underdark
fonte
1
Esta questão é provavelmente melhor postada na lista de discussão grama-dev ...
markusN
Obrigado @markusN, feito osgeo-org.1560.x6.nabble.com/…
underdark
1
A única referência que encontrei no GRASS é a função d.linegraph , embora a entrada deva ser dados numéricos. Eu sei que não é muita ajuda, mas pelo menos sabemos de alguma coisa na grama que está relacionado com gráficos de linha :)
Joseph
Eu entendi isso corretamente? Você está procurando algo como o oposto do PostGIS pgr_createTopology, onde você já possui os vértices, mas deseja criar os links descritos em termos dos dois IDs de vértices? Você poderia analisar uma tabela de vértices PostGIS para gerar a rede que você está procurando?
Adrian
@Adrian Sim, os vértices no gráfico de linhas podem ser identificados pelos dois vértices no gráfico de entrada. As arestas no gráfico de linhas representam as adjacências entre as arestas no gráfico de entrada. Talvez funcione com o PostGIS como você descreve, mas se eu tiver que implementar algo do zero, essa não seria minha primeira escolha.
Subterrâneo

Respostas:

3

Se o Python estiver bom, existem alguns bons módulos do Python que sabem sobre gráficos de linha. Um exemplo é o NetworkX (com o qual eu instalei simplesmente sudo pip install networkx).

Esta não é uma resposta perfeita, pois você precisa escrever um código de cola. Primeiro, você converteria sua entrada em objetos gráficos do NetworkX :

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

Então você chamaria a line_graphfunção get NetworkX para calcular o gráfico de linhas:

H = nx.line_graph(G)

E, finalmente, você converteria o resultado novamente em algo útil, iterando over H.edges()e H.nodes().

csd
fonte