Linien in allgemeinen Attributen in PostGIS oder GRASS auflösen oder aufteilen?

9

Ich habe ein Shapefile für die Straßenmittellinie, in dem die Straßen an jeder Kreuzung aufgeteilt sind. Ich möchte jedoch LINESTRINGs, die einen gemeinsamen Satz von Attributen haben, zu einem einzigen LINESTRING zusammenfügen. Solange sich Name, Geschwindigkeitsbegrenzung usw. nicht ändern, möchte ich sie zusammenführen. Dies ist für eine eventuelle Verschmelzung mit OpenStreetMap vorgesehen.

Die ArcGIS for Desktop-Software von Esri scheint dies mit dem Befehl Dissolve und der Option UNSPLIT_LINES zu ermöglichen.

Ich habe auch einen Überblendungsbefehl in QGIS gefunden, aber er scheint nur für Polygone und einzelne Felder zu funktionieren.

Wenn für QGIS nichts existiert, weiß jemand, wie es in PostGIS oder GRASS geht?

Joshdoe
quelle
Für PostGIS überprüfen Sie gis.stackexchange.com/questions/1387/…
underdark
Wenn diese Frage heute gestellt würde, würde sie meiner Meinung nach zu weit gefasst. Anstatt zu versuchen, es jetzt zu schließen, werde ich es bearbeiten, um die vorhandenen Antworten nachzurüsten und umfassendere Antworten zu verhindern.
PolyGeo

Antworten:

4

Interessante Frage. Ich betrachte mich nicht als PostGIS-Guru, aber ich habe mit Ihrem Problem gespielt und mir die folgende Abfrage ausgedacht, die Autobahndatensätze LINESTRINGin MULTILINESTRINGDatensätze auflöst, wenn sie gemeinsame Werte in mehreren Feldern haben (in meinem Datensatz habe ich die Felder nameund abgeglichen state). Ich habe OGR verwendet, um ein Shapefile für Autobahnen (umbenannt in ushwys) in PostGREsql zu verschieben. also heißt mein Geometriefeld wkb_geometry. Versuchen Sie, diese Abfrage zu hacken, um Ihre Daten und Feldbedingungen zu berücksichtigen:

SELECT 
u.name, 
u.state, 
ST_AsText( ST_Multi( ST_Collect( u.wkb_geometry ) ) ) as multilines 
FROM ushwys u
GROUP BY u.name, u.state 
ORDER BY u.state 
LIMIT 100; --########### DROP THE LIMIT WHEN YOU'RE DONE EXPERIMENTING

Wenn dies funktioniert, können Sie ogr2ogr verwenden, um diese Abfrage durchzuführen und die Ergebnisse in jedes von Ihnen bevorzugte Vektorformat zu exportieren, z. B. Shapefile, GML, CSV oder auf andere Weise. Informationen zum Aufrufen von SQL-Abfragen von ogr2ogr finden Sie in der OGR-SQL- Dokumentation.

Als Referenz habe ich die PostGIS ST_Collect- Anweisung sowie diese Site überprüft, die die Gruppierung in mehreren Feldern demonstriert.

Wenn Sie feststellen, dass Redaktionen dieser Abfrage für Sie nicht funktionieren, lassen Sie es mich bitte wissen, und ich werde meine Antwort streichen, damit sie nicht verweilt und die Leute verwirrt.


PS Wenn Sie nicht mit der Verwendung von ogr2ogr zum Verschieben von Geodaten in PostGIS vertraut sind, habe ich das folgende ogr2ogr-Skript verwendet, um meinen Datenimport durchzuführen ( Vorsicht beim Kopieren aus dem Web und direktes Einfügen in Ihr ogr2ogr-Befehlsfenster, da ich die Seitenformatierung gefunden habe führt Zeilenumbrüche und Ersetzungen von Schriftarten / Zeichen für doppelte Anführungszeichen ein, die das ogr-Skript beschädigen ):

ogr2ogr -f "PostGreSQL" PG:"host=127.0.0.1 user=postgres dbname=gisdb password=my_password" 
"E:\GISData\UnitedStates\highways.shp" -nln ushwys -nlt geometry

[Aktualisieren]

Ich wollte sehen, wie dies in QGIS nach dem Ausführen dieser Abfrage "aussah", also habe ich die Abfrage geändert, um diese WHEREKlausel anzuwenden (die mir alle Varianten des US Highway 65 im Bundesstaat Missouri gibt):

where u.state = 'MO' and u.name LIKE '%US%65%'

Als nächstes habe ich QGIS und das QuickWKT-Plugin verwendet, um alle acht (8) meiner resultierenden Autobahnaufzeichnungen zu visualisieren MULTILINESTRING. Wie Sie auf dem Screenshot sehen können, führen die Endergebnisse den Highway 65 von Missouis Nordgrenze zu Iowa bis zu ihrer Südgrenze zu Arkansas:

Geben Sie hier die Bildbeschreibung ein

Für mich zeigt diese Visualisierung, dass meine Abfrage keine unerwartete Vervielfältigung oder Eliminierung von Features erzeugt hat. Als nächstes fragte ich mich: "Okay, die Überblendung ergab acht Merkmale, aber wie viele Merkmale in der Originaltabelle repräsentieren tatsächlich den Highway 65 in Missouri?" Meine nächste Frage beantwortete diese Frage. Es scheint, dass der ursprüngliche Datensatz achtunddreißig (38) Merkmale verwendet, um den Highway 65 in Missouri darzustellen:

SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38

Letztendlich reduzierte die Abfrage achtunddreißig (38) Features auf acht (8) Features, die Werte in den Feldern Name und Status gemeinsam hatten. An diesem Punkt bin ich relativ sicher, dass diese Abfrage nützlich und geeignet ist, um einteilige Geometires in mehrteilige Geometrien aufzulösen, wenn die Auflösungsaufgabe mehrere Felder berücksichtigen muss.

Prost. :) :)

Elrobis
quelle
3

In PostGIS gibt es eine spezielle Funktion zum Zusammenführen von Zeilen

ST_LineMerge - Gibt einen (Satz von) LineString (s) zurück, der durch Zusammennähen eines MULTILINESTRINGs gebildet wurde.

http://www.postgis.org/docs/ST_LineMerge.html

Unterdunkel
quelle