Чи може GRASS обчислити представлення лінійного графіка вхідного графіка?


10

Мені цікаво обчислити лінійний графік для вхідного графіка, бажано в GRASS, оскільки згодом я буду використовувати інші інструменти аналізу мережі GRASS . Не вдалося знайти посилання на лінійні графіки в документах GRASS. Чи є інший термін, який я повинен використовувати в пошуку або прихована функція, яка б створила такий графік?

Для контексту:

лінійний графік непрямого графа G - це інший графік L (G), який представляє суміжності між ребрами G.

введіть тут опис зображення

Джерело: http://en.wikipedia.org/wiki/Line_graph


1
Це питання, ймовірно, краще розміщено у списку розсилки з травою-розробниками ...
markusN

Спасибі @markusN, зроблено osgeo-org.1560.x6.nabble.com/…
underdark

1
Єдина посилання, яку я знайшов у GRASS, - це функція d.linegraph , хоча вхідні дані повинні бути числовими даними. Я знаю, що це не дуже допомагає, але принаймні ми знаємо, що в GRASS є щось, що пов’язано з лінійними графіками :)
Джозеф

Я правильно це зрозумів? Ви шукаєте щось подібне до PostGIS pgr_createTopology, де ви вже маєте вершини, але хочете натомість створити посилання, описані в термінах двох вершин ідентифікаторів? Чи можете ви проаналізувати таблицю вершин PostGIS для створення мережі, яку ви шукаєте?
Адріан

@Adrian Так, вершини в лінійному графіку можна ідентифікувати за двома вершинами у вхідному графіку. Краї у лінійному графіку представляють суміжності між ребрами вхідного графіка. Можливо, це буде працювати з PostGIS, як ви описуєте, але якщо мені доведеться реалізувати щось з нуля, це не буде моїм першим вибором.
underdark

Відповіді:


3

Якщо з Python все в порядку, то є кілька хороших модулів Python, які знають про лінійні графіки. Один із прикладів - NetworkX (який я встановив просто sudo pip install networkx).

Це не ідеальна відповідь, оскільки вам потрібно написати якийсь клей-код. Спочатку ви перетворите свій вклад в об’єкти графіків NetworkX :

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

Тоді ви закликаєте line_graphфункцію отримати NetworkX для обчислення лінійного графіка:

H = nx.line_graph(G)

І, нарешті, ви перетворите результат назад на щось корисне, повторивши H.edges()і H.nodes().

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.