¿GRASS puede calcular la representación gráfica de una gráfica de entrada?

10

Estoy interesado en calcular un gráfico lineal para un gráfico de entrada, preferiblemente en GRASS, ya que utilizaré otras herramientas de análisis de red de GRASS después. No pude encontrar ninguna referencia a los gráficos de líneas en los documentos de GRASS. ¿Hay un término diferente que debería usar en mi búsqueda o una función oculta que crearía dicho gráfico?

Por contexto:

El gráfico lineal de un gráfico G no dirigido es otro gráfico L (G) que representa las adyacencias entre los bordes de G.

ingrese la descripción de la imagen aquí

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

bajo oscuro
fuente
1
Esta pregunta es probablemente mejor ha escrito en la lista de correo de hierba-dev ...
markusN
Gracias @markusN, hecho osgeo-org.1560.x6.nabble.com/…
underdark
1
La única referencia que encontré dentro de GRASS es la función d.linegraph , aunque la entrada debe ser datos numéricos. Sé que no es de mucha ayuda, pero al menos sabemos que hay algo en GRASS que está relacionado con los gráficos de líneas :)
Joseph
¿He entendido esto correctamente? ¿Está buscando algo como lo opuesto a PostGIS pgr_createTopology, donde ya tiene los vértices pero desea crear los enlaces descritos en términos de los dos identificadores de vértice? ¿Podría analizar una tabla de vértices PostGIS para generar la red que está buscando?
Adrian
@Adrian Sí, los vértices en el gráfico lineal se pueden identificar por los dos vértices en el gráfico de entrada. Las aristas en el gráfico lineal representan las adyacencias entre aristas en el gráfico de entrada. Tal vez funcionaría con PostGIS como usted describe, pero si tuviera que implementar algo desde cero, esa no sería mi primera opción.
oscuro

Respuestas:

3

Si Python está bien, entonces hay algunos buenos módulos de Python que conocen los gráficos de líneas. Un ejemplo es NetworkX (que instalé simplemente sudo pip install networkx).

Esta no es una respuesta perfecta ya que necesita escribir un código de pegamento. Primero, convertiría su entrada en objetos gráficos de NetworkX :

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

Luego llamaría a la line_graphfunción get NetworkX para calcular el gráfico lineal:

H = nx.line_graph(G)

Y finalmente, volvería a convertir el resultado en algo útil iterando H.edges()y H.nodes().

csd
fuente