Wie konvertiere ich einfache Linienfunktionen in ein topologisches Netzwerk?
12
Gibt es mit Gdal / OGR eine Möglichkeit, eine shp-, kml- oder PostGIS-Leitungsschicht in ein Netzwerk von Knoten und Segmenten umzuwandeln, damit sie in Paketen wie networkx verwendet werden kann?
Es ist wahrscheinlich erwähnenswert, dass OGR und NetworkX beide sagen, dass sie unterstützen GML, Geography Markup Languagewährend sich Ersteres auf Letzteres bezieht Graph Modelling Language.
Das ist ein beschissener Deal. Wie kann ich dann eine Netzwerkanalyse durchführen?
Dassouki
@dassouki - Starte ein Open Source Projekt! Es ist auf meiner Liste, aber im Moment weit unten. Ich würde gerne die Möglichkeit haben, daran mitzuarbeiten, wenn andere interessiert sind.
Mark
@fmark haben bereits transpotools.com
dassouki
@dassouki - Klingt aufregend! In welchem Stadium befindet sich das Projekt? Die Homepage sagt TranspoTools Will be here shortly. Gibt es Code im Google-Code-Repository? Alles was ich sehen konnte war leer.
Mark
@dassouki - Nur zur Bestätigung, ich weiß nicht viel über das Feld Transportanalyse (mein GIS-Interesse liegt nicht viel weiter als die Berechnung der Netzwerkentfernung in dieser Phase), würde aber gerne an einem ogr2networkxTyp-Tool zusammenarbeiten.
Mark
2
Sie haben nicht speziell erwähnt, welche Art von Netzwerkanalyse Sie durchführen möchten, aber wenn Sie am Routing interessiert sind, gibt es mehrere Optionen:
PgRouting http://pgrouting.postlbs.org/ arbeitet mit Daten in PostGIS, um Routing-Analysen durchzuführen. Es unterstützt die Algorithmen Shortest Path Dijkstra, Shortest Path A *, Shortest Path Shooting Star und Travelling Salesperson (TSP). Es werden auch Fahrstreckenberechnungen durchgeführt. Eine Liste von Beispiel-Apps, die PgRouting verwenden, finden Sie unter http://pgrouting.postlbs.org/wiki/pgRoutingDemo PgRouting steuert die http://www.ridethecity.com/App Ride the City .
Das OpenRouter-Projekt http://wiki.osgeo.org/wiki/OpenRouter. Dieses Projekt sieht interessant aus, ist aber zu diesem Zeitpunkt noch nicht besonders ausgereift.
(Entschuldigung für die angegebenen URLs, aber ich habe nicht genug Credits, um> 1 URl zu posten ...)
+1 für dich. Ich möchte mich von Openstreet- und Postgis-Daten entfernen, da Datenbeschränkungen bestehen und wir Postgis vorerst fallen lassen. Wir stellen normalerweise unsere eigenen Daten zur Verfügung, die weitaus besser sind als Openstreet, aber gleichzeitig möchten wir uns nicht auf pgrouting beschränken. Das andere Problem ist, dass wir beispielsweise eine pythonische oder arcgis-freundliche Garbage Collection oder Probleme mit chinesischen Postboten oder Traveler-Verkäufern implementieren möchten.
Dassouki
Haben Sie sich SpatiaLite angesehen? Dies würde Ihnen eine OpenSource-Geodatenbank geben, die dateibasiert und plattformunabhängig ist. Ich habe es nicht verwendet, aber es scheint, dass es Routing-Funktionen mit SpatiaLite < gaia-gis.it/spatialite/spatialite-network-2.3.1.html > gibt
DavidF
Vielen Dank auch, dass Sie mich auf NetworkX aufmerksam gemacht haben. Das sieht wirklich cool aus Python-Modul.
DavidF
2
Ich denke, die Antwort hängt davon ab. Die meisten GIS-Formate enthalten keine expliziten Adjazenzinformationen (z. B. gibt es in einem .shp keine Indikatoren mit einfachen Linienfunktionen, die darauf hinweisen, dass zwei Funktionen einen gemeinsamen Endpunkt haben). Dies ist ein Deal-Breaker, um sie direkt in ein Netzwerk einzulesen.
Bei einem flüchtigen Blick auf den Code sieht es so aus, als würde das von scw verknüpfte Utilitynetwork-Paket diese Informationen nur dann wiederfinden, wenn die Endpunkte Bit für Bit identisch sind. Dies könnte für die meisten Bedürfnisse gut genug sein, auch für Ihre! (Ich könnte mich irren, da es in der Tat nur ein flüchtiger Blick war.)
Für etwas Robusteres - zum Beispiel möchten Sie möglicherweise neue Knoten im Netzwerk erstellen, an denen sich zwei Kanten kreuzen, oder Sie möchten Störungen behandeln, die überlappende Endpunkte geringfügig voneinander unterscheiden - müssen Sie nach einem Ansatz suchen das untersucht die Geometrie tiefer.
Ich habe mit Boundary Generator etwas Ähnliches getan , um Informationen zur Netzwerkadjazenz aus Polygonen wiederherzustellen: leider falsche Plattform, Sprache und geometrisches Grundelement für Sie. Es kann jedoch aufschlussreich sein, wie Robustheitsprobleme angegangen werden sollen.
+1 ... Ich bin mir nicht sicher, was du mit der falschen Plattform meinst? Ich verstehe Ihre Erklärung und es ist wirklich beeindruckend, dass ich die Daten nicht in Knoten und Gewichte konvertieren kann. Die einzigen 2 Programme, die dies aus shp-Dateien tun, sind TransCAD und EMME2 / 3
dassouki
Mit "falscher Plattform" meinte ich nur, dass Boundary Generator zumindest für den Moment für die ArcGIS-Umgebung geschrieben wurde. :) Es würde einige Anpassungen erfordern, um mit OGR zu arbeiten. (Außerdem wäre ein erheblicher Teil des neuen Codes erforderlich, um übereinstimmende Endpunkte aus Linien zu erkennen, im Gegensatz zu übereinstimmenden Kanten aus Polygonen. Ich könnte dies zur nächsten Version hinzufügen, wenn ich Zeit habe. Es scheint sehr nützlich zu sein .)
GML
,Geography Markup Language
während sich Ersteres auf Letzteres beziehtGraph Modelling Language
.Antworten:
Ben Reilly hat kürzlich einen Link zu einer anderen Frage zu seinem Python-Paket Utilitynetwork gepostet , das die OGR-Bindungen verwendet, um Daten in networkx DiGraphs zu konvertieren .
quelle
Nach der Networkx-Liste der von GDAL unterstützten importierbaren Grafikformate und -formate zu urteilen , bezweifle ich, dass eine solche Konvertierung möglich ist.
quelle
TranspoTools Will be here shortly
. Gibt es Code im Google-Code-Repository? Alles was ich sehen konnte war leer.ogr2networkx
Typ-Tool zusammenarbeiten.Sie haben nicht speziell erwähnt, welche Art von Netzwerkanalyse Sie durchführen möchten, aber wenn Sie am Routing interessiert sind, gibt es mehrere Optionen:
PgRouting http://pgrouting.postlbs.org/ arbeitet mit Daten in PostGIS, um Routing-Analysen durchzuführen. Es unterstützt die Algorithmen Shortest Path Dijkstra, Shortest Path A *, Shortest Path Shooting Star und Travelling Salesperson (TSP). Es werden auch Fahrstreckenberechnungen durchgeführt. Eine Liste von Beispiel-Apps, die PgRouting verwenden, finden Sie unter
http://pgrouting.postlbs.org/wiki/pgRoutingDemo
PgRouting steuert diehttp://www.ridethecity.com/
App Ride the City .Das OpenRouter-Projekt
http://wiki.osgeo.org/wiki/OpenRouter
. Dieses Projekt sieht interessant aus, ist aber zu diesem Zeitpunkt noch nicht besonders ausgereift.(Entschuldigung für die angegebenen URLs, aber ich habe nicht genug Credits, um> 1 URl zu posten ...)
quelle
Ich denke, die Antwort hängt davon ab. Die meisten GIS-Formate enthalten keine expliziten Adjazenzinformationen (z. B. gibt es in einem .shp keine Indikatoren mit einfachen Linienfunktionen, die darauf hinweisen, dass zwei Funktionen einen gemeinsamen Endpunkt haben). Dies ist ein Deal-Breaker, um sie direkt in ein Netzwerk einzulesen.
Bei einem flüchtigen Blick auf den Code sieht es so aus, als würde das von scw verknüpfte Utilitynetwork-Paket diese Informationen nur dann wiederfinden, wenn die Endpunkte Bit für Bit identisch sind. Dies könnte für die meisten Bedürfnisse gut genug sein, auch für Ihre! (Ich könnte mich irren, da es in der Tat nur ein flüchtiger Blick war.)
Für etwas Robusteres - zum Beispiel möchten Sie möglicherweise neue Knoten im Netzwerk erstellen, an denen sich zwei Kanten kreuzen, oder Sie möchten Störungen behandeln, die überlappende Endpunkte geringfügig voneinander unterscheiden - müssen Sie nach einem Ansatz suchen das untersucht die Geometrie tiefer.
Ich habe mit Boundary Generator etwas Ähnliches getan , um Informationen zur Netzwerkadjazenz aus Polygonen wiederherzustellen: leider falsche Plattform, Sprache und geometrisches Grundelement für Sie. Es kann jedoch aufschlussreich sein, wie Robustheitsprobleme angegangen werden sollen.
quelle
In MarineMap gibt es einen Geodjango-Code , der möglicherweise an die Aufgabe angepasst werden kann.
quelle