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 LINESTRING
in MULTILINESTRING
Datensätze auflöst, wenn sie gemeinsame Werte in mehreren Feldern haben (in meinem Datensatz habe ich die Felder name
und 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 WHERE
Klausel 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:
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. :) :)