Wie fülle ich ein ungerichtetes Diagramm aus PostGIS aus?

9

Diese Frage bezieht sich eher auf Ressourcen, die ich möglicherweise noch nicht identifiziert habe, obwohl ich schon eine Weile im Internet gesucht habe.

In dem Projekt, an dem ich gerade arbeite, muss ich einen Algorithmus für den kürzesten Weg in einem Diagramm ausführen, das Büroräume, Korridore, Treppen, Aufzüge und Routen zwischen Gebäuden darstellt.

Für die Präsentationsebene habe ich überlegt, Python-Scripting mit MapServer zu verwenden, aber jetzt denke ich mehr darüber nach, wie das Diagramm aus den (in eine) OpenGV generierten (in OpenEV generierten) Shapefiles erstellt werden kann, damit Kanten oder einfach hinzugefügt und entfernt werden können Gewichte oder Informationen über die Punkte danach.

Für Python gibt es ein Modul namens networkX, das sich mit Diagrammen befasst, und obwohl dieses Problem hier im Stapelaustausch angesprochen wurde , ist das Diagramm, das ich erstellen möchte , kein Digraph, sondern ein ungerichtetes.

Update: Vor 5 Tagen wurde Ben Reillys Utility-Netzwerk zum networkX-Projekt hinzugefügt. Utilitynetwork erstellt aus Shapefile-Features ein gerichtetes Diagramm.
Die Fragen bleiben offen für einen ähnlichen Ansatz zum Lesen von Funktionen aus der postGIS-Datenbank.

user39901230
quelle
Sie möchten pgRouting nicht verwenden?
Underdark
Ich würde pgRouting verwenden, aber der Algorithmus, den ich zu implementieren versuche, ist bidirektional a-star und keine Standardoption.
user39901230

Antworten:

5

NetworkX verfügt über eine Methode zum Konvertieren gerichteter Diagramme in ungerichtete .

Außerdem muss der Code zum Lesen eines Shapefiles (oder eines Verzeichnisses von Shapefiles) nicht unbedingt ein gerichtetes Diagramm ausgeben, das war genau das, was ich damals brauchte. Ich habe es nicht versucht, aber die einzelne Zeile ersetzt:

net = nx.DiGraph()

... könnte einfach den Trick machen.

NetworkX scheint das sofortige Lesen von Shapefiles (mit OGR) in 1.4 ( Feature ) zu unterstützen.

bwreilly
quelle
Entschuldigung für die Verwirrung. Eigentlich versuche ich, die Shapefiles mit shp2pgsql in eine PostGIS-Datenbank zu konvertieren und sie dann aus der PostGIS-Datenbank in das networkX-Diagramm zu importieren.
user39901230
danke Ben. Ich habe gerade bemerkt, dass sie vor 5 Tagen das Ticket geschlossen haben und Ihr Code zum networkX-Projekt hinzugefügt wurde. Es wäre interessant gewesen zu sehen, ob es möglich wäre, dasselbe mit den Funktionen aus der postGIS-Datenbank zu tun, aber ich werde mir das in den Weihnachtsferien ansehen.
user39901230
Da das Netzwerkx das Modul enthält, aber noch nicht v1.4 veröffentlicht wurde, wäre es möglich, einige Beispiele für die Verwendung von Utilitynetwork zu geben. Bisher habe ich das Testnetzwerk und Ihre hier gefundenen Beispiele
durchgesehen
Es gibt noch einiges zu tun, weshalb ich es nicht auf Pypi gestellt habe. Ich habe das Wiki jetzt veröffentlicht, es sollte die besten Arbeitsproben enthalten: bitbucket.org/gallipoli/utilitynetwork/wiki/Home
bwreilly
Wäre es mir möglich, auch einen Beitrag zu leisten, da ich vorhabe, dies in mein Abschlussprojekt aufzunehmen?
user39901230
2

Sie sind sich nicht sicher, wie interessiert Sie an der Verwendung anderer Frameworks sind oder ob Sie dieses Problem bereits gelöst haben, aber das Geodjango-Projekt fügt GIS-Datenmodellen für eine Vielzahl von GIS-fähigen Datenbanken, einschließlich Postgres mit installierten PostGIS-Bindungen, wirklich nette ORM-Funktionen hinzu .

Der Geodjango-Link befindet sich hier: http://docs.djangoproject.com/de/dev/ref/contrib/gis/install/#overview

Beachten Sie, dass Django ein Webframework für Python ist. Geodjango wurde entwickelt, um GIS-Daten für die Backend-Webentwicklung zu bearbeiten und anzuzeigen. Es bietet jedoch auch eine viel intuitivere und leistungsfähigere Reihe von Klassen als die direkten OGR-Python-Bindungen (viel mehr "Python" als direkt 'von C-Syntax konvertiert', z. B. können Sie direkt eine django.contrib.gis.geos.linestring.LineString-Klasse erstellen, anstatt eine ogr.Geometry-Klasse mit der Konstante wkbLineString im Konstruktor zu erstellen.

Im Geodjango-Tutorial finden Sie: http://docs.djangoproject.com/de/dev/ref/contrib/gis/tutorial/

Die Schritte zum Konfigurieren des Lese- / Schreibvorgangs aus Ihrer Postgres-Datenbank sind so einfach wie bei der Verwendung anderer Django-Python-Modelle. Die Kopfschmerzen richten Ihre Geodatenbank ein. Informationen zum Laden von Daten in die Postgres-Datenbank finden Sie unter dem Link #layermapping im obigen Tutorial. Es handelt sich um eine Feldzuordnung zwischen den verfügbaren Daten in der Formdatei und den Datenbankspalten, die für Ihr Datenmodell eingerichtet wurden.

Zumindest würde ich 2-3 Stunden brauchen, um das Tutorial durchzugehen und die PostGIS-Bindungen einzurichten und zu prüfen, ob dieses GIS-Tool das ist, wonach Sie suchen.

Beachten Sie auch, dass Sie bei einer GIS-fähigen Datenbank (z. B. PostGIS-Bindungen für pgsql) mithilfe der in der Datenbank gespeicherten Funktionen direkt in der Datenbankgeometrie (Linien / Polygone) Daten enthalten können (z. B. ST_Contains(...)siehe SQL-Beispiel) für postgis / pgsql hier: http://postgis.refractions.net/docs/ch04.html#id2639062 ... und der beste Teil über Geodjango, ist , dass es optimiert ist diese räumliche Lookups für Sie tun! .

tmarthal
quelle