Domanda interessante. Non mi considero un guru di PostGIS, ma ho risolto il problema e mi è venuta in mente la seguente query che dissolve i LINESTRING
record dell'autostrada in MULTILINESTRING
record quando hanno valori comuni in più campi (nel mio set di dati, ho abbinato i campi name
e state
). Ho usato OGR per inserire uno shapefile delle autostrade (rinominato in ushwys) in PostGREsql; così viene chiamato il mio campo di geometria wkb_geometry
. Prova a modificare questa query per soddisfare i tuoi dati e le condizioni del campo:
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
Se funziona, puoi usare ogr2ogr per eseguire questa query ed esportare i risultati più qualsiasi formato vettoriale che preferisci, come shapefile, GML, CSV o altro. Per informazioni sulla chiamata di query SQL da ogr2ogr, consultare la documentazione OGR SQL .
A titolo di riferimento, ho esaminato le istruzioni PostGIS ST_Collect , nonché questo sito che dimostra il raggruppamento su più campi.
Se trovi che le redazioni di questa query non funzionano per te, per favore fammi sapere e colpirò la mia risposta in modo che non indugi e confonda le persone.
PS Se non hai familiarità con l'uso di ogr2ogr per inserire i geodati in PostGIS, ho usato il seguente script ogr2ogr per eseguire l'importazione dei miei dati ( attenzione a copiare dal web e incollare direttamente nella finestra di comando di ogr2ogr, poiché ho trovato la formattazione della pagina introduce interruzioni di riga e sostituzioni di caratteri / caratteri per virgolette doppie che interrompono lo script ogr ):
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
[Aggiornare]
Volevo vedere come "appariva" in QGIS dopo aver eseguito quella query, quindi ho modificato la query per applicare questa WHERE
clausola (che mi dà tutte le varianti della US Highway 65 nello stato del Missouri):
where u.state = 'MO' and u.name LIKE '%US%65%'
Successivamente ho usato QGIS e il plug-in QuickWKT per visualizzare tutti e otto (8) i miei MULTILINESTRING
record di autostrade risultanti . Come puoi vedere nello screenshot, i risultati finali portano Hwy 65 dal confine settentrionale del Missoui con lo Iowa fino al confine meridionale con l'Arkansas:
Per me, questa visualizzazione dimostra che la mia query non ha prodotto duplicazioni o eliminazioni impreviste delle funzionalità. Quindi mi sono chiesto "ok, la dissolvenza ha restituito otto funzioni, ma quante funzioni nella tabella originale rappresentano effettivamente Hwy 65 in Missouri?" La mia prossima domanda ha risposto a quella domanda. Sembra che il set di dati originale utilizzi trentotto (38) funzionalità per rappresentare Hwy 65 in Missouri:
SELECT count(*) FROM ushwys WHERE state = 'MO' AND name LIKE '%US%65%';
-- returned 38
All'analisi finale, la query ha ridotto trentotto (38) funzioni a otto (8) caratteristiche che condividevano valori nei campi nome e stato. A questo punto, sono relativamente fiducioso che questa query sia utile e appropriata per dissolvere geometrie a parte singola in geometrie a più parti quando l'attività di dissoluzione deve considerare più campi.
Saluti. :)