Sciogliere o separare le righe sugli attributi comuni in PostGIS o GRASS?


9

Ho uno shapefile della linea centrale della strada con strade divise ad ogni incrocio. Tuttavia, vorrei unirmi a LINESTRING che hanno un insieme comune di attributi in un singolo LINESTRING. Finché il nome, il limite di velocità, ecc., Non cambiano, voglio unirli insieme. Questo è per eventuale conflazione in OpenStreetMap.

Il software ArcGIS per desktop di Esri sembra consentire ciò con il comando Dissolve e l'opzione UNSPLIT_LINES.

Ho anche trovato un comando Dissolve in QGIS ma sembra funzionare solo su poligoni e singoli campi.

Supponendo che non esista nulla per QGIS, qualcuno sa come farlo in PostGIS o GRASS?



Se questa domanda venisse posta oggi, penso che sarebbe chiusa come troppo ampia. Invece di provare a chiuderlo ora, ho intenzione di modificarlo per aggiornare le risposte esistenti e prevenire risposte più ampie.
PolyGeo

Risposte:


4

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 LINESTRINGrecord dell'autostrada in MULTILINESTRINGrecord quando hanno valori comuni in più campi (nel mio set di dati, ho abbinato i campi namee 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 WHEREclausola (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 MULTILINESTRINGrecord 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:

inserisci qui la descrizione dell'immagine

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. :)



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.