GRASS peut-il calculer la représentation graphique en courbes d'un graphique en entrée?

10

Je suis intéressé par le calcul d'un graphique linéaire pour un graphique d'entrée, de préférence dans GRASS car je vais utiliser d'autres outils d'analyse de réseau GRASS par la suite. Je n'ai trouvé aucune référence aux graphiques linéaires dans les documents GRASS. Y a-t-il un terme différent que je devrais utiliser dans ma recherche ou une fonction cachée qui créerait un tel graphique?

Pour le contexte:

le graphe linéaire d'un graphe non orienté G est un autre graphe L (G) qui représente les contiguïtés entre les bords de G.

entrez la description de l'image ici

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

obscur
la source
1
Cette question est probablement mieux publiée dans la liste de diffusion grass-dev ...
markusN
Merci @markusN, fait osgeo-org.1560.x6.nabble.com/…
underdark
1
La seule référence que j'ai trouvée dans GRASS est la fonction d.linegraph , bien que l'entrée doive être des données numériques. Je sais que ce n'est pas très utile, mais au moins nous savons qu'il y a quelque chose dans GRASS qui est lié aux graphiques linéaires :)
Joseph
Ai-je bien compris cela? Vous recherchez quelque chose comme l'opposé de PostGIS pgr_createTopology, où vous avez déjà les sommets mais souhaitez à la place créer les liens décrits en termes des deux ID de sommet? Pourriez-vous analyser une table de sommets PostGIS pour générer le réseau que vous recherchez?
Adrian
@Adrian Oui, les sommets du graphique linéaire peuvent être identifiés par les deux sommets du graphique d'entrée. Les bords du graphique linéaire représentent les contiguïtés entre les bords du graphique d'entrée. Peut-être que cela fonctionnerait avec PostGIS comme vous le décrivez, mais si je dois implémenter quelque chose à partir de zéro, ce ne serait pas mon premier choix.
underdark

Réponses:

3

Si Python est correct, il existe de bons modules Python qui connaissent les graphiques linéaires. Un exemple est NetworkX (que j'ai installé avec simplement sudo pip install networkx).

Ce n'est pas une réponse parfaite car vous devez écrire du code de colle. Vous devez d'abord convertir votre entrée en objets graphiques NetworkX :

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

Ensuite, vous appelez la line_graphfonction get NetworkX pour calculer le graphique linéaire:

H = nx.line_graph(G)

Et enfin, vous convertiriez le résultat en quelque chose d'utile en itérant sur H.edges()et H.nodes().

csd
la source