Kann GRASS die Liniendiagrammdarstellung eines Eingabediagramms berechnen?


10

Ich bin daran interessiert, ein Liniendiagramm für ein Eingabediagramm zu berechnen, vorzugsweise in GRASS, da ich danach andere GRASS-Netzwerkanalysetools verwenden werde . Ich konnte in den GRASS-Dokumenten keinen Verweis auf Liniendiagramme finden. Gibt es einen anderen Begriff, den ich in meiner Suche verwenden sollte, oder eine versteckte Funktion, die ein solches Diagramm erstellen würde?

Zum Kontext:

Das Liniendiagramm eines ungerichteten Diagramms G ist ein weiteres Diagramm L (G), das die Nachbarschaften zwischen den Kanten von G darstellt.

Geben Sie hier die Bildbeschreibung ein

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


1
Diese Frage wird wahrscheinlich besser in der
Grasentwickler


1
Die einzige Referenz, die ich in GRASS gefunden habe, ist die Funktion d.linegraph , obwohl die Eingabe numerische Daten sein muss. Ich weiß, es ist nicht viel Hilfe, aber zumindest wissen wir, dass es etwas in GRASS gibt, das mit Liniendiagrammen zusammenhängt :)
Joseph

Habe ich das richtig verstanden Sie suchen nach dem Gegenteil von PostGIS pgr_createTopology, wo Sie bereits die Scheitelpunkte haben, aber stattdessen die Links erstellen möchten, die anhand der beiden Scheitelpunkt-IDs beschrieben wurden? Könnten Sie eine PostGIS-Vertex-Tabelle analysieren, um das gesuchte Netzwerk zu generieren?
Adrian

@Adrian Ja, Scheitelpunkte im Liniendiagramm können durch die beiden Scheitelpunkte im Eingabediagramm identifiziert werden. Die Kanten im Liniendiagramm repräsentieren die Nachbarschaften zwischen den Kanten im Eingabediagramm. Vielleicht würde es mit PostGIS funktionieren, wie Sie es beschreiben, aber wenn ich etwas von Grund auf neu implementieren muss, wäre das nicht meine erste Wahl.
Underdark

Antworten:


3

Wenn Python in Ordnung ist, gibt es einige gute Python-Module, die sich mit Liniendiagrammen auskennen. Ein Beispiel ist NetworkX (das ich einfach installiert habe sudo pip install networkx).

Dies ist keine perfekte Antwort, da Sie einen Klebercode schreiben müssen. Zuerst würden Sie Ihre Eingabe in NetworkX-Diagrammobjekte konvertieren :

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

Dann würden Sie die line_graphFunktion get NetworkX aufrufen, um das Liniendiagramm zu berechnen:

H = nx.line_graph(G)

Und schließlich würden Sie das Ergebnis durch Iterieren über H.edges()und wieder in etwas Nützliches konvertieren H.nodes().

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.