GRASS può calcolare la rappresentazione del grafico a linee di un grafico di input?


10

Sono interessato a calcolare un grafico a linee per un grafico di input, preferibilmente in GRASS poiché in seguito userò altri strumenti di analisi della rete GRASS . Non sono riuscito a trovare riferimenti ai grafici a linee nei documenti GRASS. C'è un termine diverso che dovrei usare nella mia ricerca o una funzione nascosta che creerebbe un tale grafico?

Per contesto:

il grafico a linee di un grafico non orientato G è un altro grafico L (G) che rappresenta le adiacenze tra i bordi di G.

inserisci qui la descrizione dell'immagine

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


1
Questa domanda è probabilmente posta meglio nella mailing list grass-dev ...
markusN,


1
L'unico riferimento che ho trovato in GRASS è la funzione d.linegraph , sebbene l'input debba essere un dato numerico. So che non è di grande aiuto ma almeno sappiamo che c'è qualcosa in GRASS che è legato ai grafici a linee :)
Joseph

L'ho capito bene? Stai cercando qualcosa di simile al contrario di PostGIS pgr_createTopology, dove hai già i vertici ma vuoi invece creare i collegamenti descritti in termini di due ID vertici? Potresti analizzare una tabella dei vertici di PostGIS per generare la rete che stai cercando?
Adrian,

@Adrian Sì, i vertici nel grafico a linee possono essere identificati dai due vertici nel grafico di input. I bordi nel grafico a linee rappresentano le adiacenze tra i bordi nel grafico di input. Forse funzionerebbe con PostGIS come descrivi, ma se dovessi implementare qualcosa da zero non sarebbe la mia prima scelta.
underdark

Risposte:


3

Se Python va bene, allora ci sono alcuni buoni moduli Python che conoscono i grafici a linee. Un esempio è NetworkX (che ho installato semplicemente sudo pip install networkx).

Questa non è una risposta perfetta poiché è necessario scrivere un codice di colla. Per prima cosa convertiresti i tuoi input in oggetti grafici NetworkX :

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

Quindi chiameresti la line_graphfunzione get NetworkX per calcolare il grafico a linee:

H = nx.line_graph(G)

E infine convertiresti il ​​risultato in qualcosa di utile ripetendo ripetutamente H.edges()e H.nodes().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.