Czy GRASS może obliczyć reprezentację wykresu liniowego wykresu wejściowego?

10

Interesuje mnie obliczenie wykresu liniowego dla wykresu wejściowego, najlepiej w GRASS, ponieważ później będę używać innych narzędzi do analizy sieci GRASS . Nie mogłem znaleźć żadnego odniesienia do wykresów liniowych w dokumentach GRASS. Czy jest jakiś inny termin, którego powinienem używać podczas wyszukiwania, lub ukryta funkcja, która stworzyłaby taki wykres?

W kontekście:

wykres liniowy niekierowanego wykresu G to kolejny wykres L (G), który reprezentuje przylegania między krawędziami G.

wprowadź opis zdjęcia tutaj

Źródło: http://en.wikipedia.org/wiki/Line_graph

podmrok
źródło
1
To pytanie jest prawdopodobnie lepiej opublikowane na liście mailingowej
deweloperów
Dzięki @markusN, zrobione osgeo-org.1560.x6.nabble.com/…
podmrok
1
Jedyne odniesienie, które znalazłem w GRASS, to funkcja d.linegraph , chociaż dane wejściowe muszą być danymi liczbowymi. Wiem, że to niewiele pomaga, ale przynajmniej wiemy, że w GRASS jest coś, co jest związane z wykresami liniowymi :)
Joseph
Czy zrozumiałem to poprawnie? Szukasz czegoś przeciwnego do PostGIS pgr_createTopology, w którym masz już wierzchołki, ale zamiast tego chcesz utworzyć łącza opisane w kategoriach dwóch identyfikatorów wierzchołków? Czy potrafisz przeanalizować tabelę wierzchołków PostGIS, aby wygenerować sieć, której szukasz?
Adrian
@Adrian Tak, wierzchołki na wykresie liniowym można rozpoznać po dwóch wierzchołkach na wykresie wejściowym. Krawędzie na wykresie liniowym reprezentują przylegania między krawędziami na wykresie wejściowym. Być może będzie działać z PostGIS, jak to opisujesz, ale jeśli będę musiał zaimplementować coś od zera, nie byłby to mój pierwszy wybór.
podmrok

Odpowiedzi:

3

Jeśli Python jest w porządku, istnieje kilka dobrych modułów Python, które wiedzą o grafach liniowych. Jednym z przykładów jest NetworkX (który zainstalowałem po prostu sudo pip install networkx).

To nie jest idealna odpowiedź, ponieważ musisz napisać kod kleju. Najpierw przekonwertujesz dane wejściowe na obiekty wykresów NetworkX :

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

Następnie wywołaj line_graphfunkcję get NetworkX, aby obliczyć wykres liniowy:

H = nx.line_graph(G)

I w końcu przekonwertowałbyś wynik z powrotem na coś użytecznego, powtarzając H.edges()i H.nodes().

csd
źródło