2012-03-17 31 views
5

Ho una mappa che ho digitalizzato e convertito in un livello vettoriale (solo i fiumi). Il problema è che la vettorizzazione ha prodotto un gran numero di segmenti per ciascun fiume, che si presentano come caratteristiche diverse (ognuno può avere più segmenti di linea retta, ma non coprono interi fiumi). Quello che sto cercando è uno strumento per unire in una caratteristica (una polilinea, immagino) tutti i segmenti i cui estremi si trovano entro una determinata distanza. Sto usando QGis e il plugin GRASS. Ho provato v.clean.snap, v.build.polylines, ma non sono ancora riuscito a unire le linee. Qualsiasi aiuto sarebbe molto apprezzato!Unire più segmenti di linea in una sola riga - GIS

+2

Ciascuno dei fiumi ha un ID singolo comune? – Simbamangu

+0

Riportate le modifiche a Q: "unione" e "groub-by" sembrano modifiche leggermente minori e tangenziali al titolo della domanda quando l'originale era adeguato e sufficiente. –

risposta

3

Suggerirei di selezionare manualmente le parti di linea e quindi utilizzare lo strumento "Unisci" (situato nella barra degli strumenti di modifica avanzata).

Si potrebbe anche voler chiedere a queste domande sopra a http://gis.stackexchange.com

+1

Grazie, ma ho alcune centinaia di situazioni simili, e devo ripetere per 133 mappe ... Suppongo di aver davvero bisogno di un plugin per questo. Qualche suggerimento in cui potrei iniziare a cercare? – LittleFish

-3

È possibile utilizzare lo strumento (ARC Toolbox) "Dissolve". Questo li unirà tutti in un unico segmento.

Quindi è possibile esportare i nodi (solo regolari), ovvero i punti di intersezione.

Quindi è possibile dividere la funzione di linea disciolta con i nodi. Ciò ti fornirà almeno una divisione di funzionalità vettoriale solo nei punti di intersezione.

Almeno è un ulteriore passo avanti.

+2

perché TUTTI I MAIUSCOLI? è difficile da leggere – dove

+1

L'OP ha richiesto la soluzione QGIS e sembra che si stia riferendo ad ArcGIS? – radek

4

È possibile farlo utilizzando la libreria GEOS nel proprio linguaggio di programmazione e magari anche tramite riga di comando. Nel mio caso, lo facevo in R, utilizzando rgeos libreria:

require(rgdal) 
require(rgeos) 
lines <- readOGR("f:/dir", "itineraris") 
# grouping line features by lines$ITINERARI 
lines2 <- gLineMerge(lines, byid = lines$ITINERARI, id = lines$ITINERARI) 
writeOGR(lines2, "f:/dir", "itineraris_merged", driver="ESRI Shapefile") 

Fate attenzione: dalla nota nella documentation"specificamente si unisce segmenti di linea con intersecano punti finali" sembra che le caratteristiche della linea deve essere consecutivo, tuttavia non è chiaro se questo si applica anche al caso in cui si fondono per ID.

1

Per chiunque altro inciampo su questa domanda:

È possibile utilizzare il plugin Roadgraph (Shortest Path) o lo script PointsToRoute. Scegli i punti alle estremità (o nel caso di Points2Route aggiungi punti extra per specificare da più percorsi) e quindi esporta nel proprio livello.

Per quanto riguarda le 133 mappe, ho modificato lo script PointsToRoute per una situazione simile per carichi pesanti per passare automaticamente a un livello di linee e trovare rotte tra i loro endpoint. Lo pulirò e vedrò se posso pubblicarlo presto su github.

PointsToRoute: https://github.com/anitagraser/QGIS-Processing-tools/blob/master/1.1/scripts/points_to_route.py

ShortestPath (Roadgraph): Ciò è reso possibile dal QGIS plugin manager. Ricorda che nelle versioni più recenti di QGIS è configurato da Vector->RoadGraph -> Menu Impostazioni nonostante il plugin si riferisca a se stesso come "Percorso più breve".

1

Una risposta molto tardi che potrebbe essere utile ad altre persone:

Ho affrontato lo stesso problema e ho sviluppato un plugin QGIS per risolverlo. Unisce automaticamente più linee connesse (ad es.linee che condividono un endpoint) in un insieme più piccolo di linee più lunghe. Il tipo di livello di output è Line, non PolyLine. L'unione può essere basata su uno di questi due criteri:

  • Lunghezza: un segmento viene unito al suo vicino più lungo.
  • Allineamento: un segmento viene unito al suo vicino meglio allineato. Penso che questo criterio sia il più adatto per una rete fluviale.

Questo plugin si chiama MergeLines (full documentation here), lo si può trovare nella repo QGIS pubblico. Il lavoro è ancora in corso, non esitare a suggerire nuove funzionalità.

Problemi correlati