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
risposta
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
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
È 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.
È 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.
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".
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à.
- 1. Unisci segmenti di linea 2d
- 2. Più locali su una sola linea?
- 3. Segmenti di controllo su linea
- 4. Collegamento di due segmenti di linea
- 5. Distanza minima tra due segmenti di linea
- 6. Modifica oggetto più attributi in una sola riga
- 7. output di stampa in una sola riga
- 8. Concatenate uscita di due comandi in una sola linea di
- 9. Intersezione di due segmenti di linea paralleli
- 10. R/GIS: trova la distanza ortogonale tra una posizione e la linea più vicina
- 11. Prepend una sola linea di file con Ruby
- 12. CSS text ottenere in una sola linea anziché due
- 13. RegExp rileva più istanze di una sola lettera in una riga?
- 14. Calcolo della distanza più breve tra due linee (segmenti di linea) in 3D
- 15. modo efficiente per gestire segmenti di linea 2d
- 16. query più liste in una sola volta
- 17. Semplificare più controlli booleani in una sola
- 18. IntelliJ IDEA funzione di una sola riga di formattazione
- 19. Segmenti segmento di movimento
- 20. ctags RegEx per dichiarazioni multiple in una sola riga
- 21. più comandi su una sola riga in un file batch di Windows
- 22. Aggiungendo più segmenti con System.Uri
- 23. Rimuovere la linea di separazione per una sola cella
- 24. Come verificare se due segmenti di linea si intersecano?
- 25. Come calcolare i punti finali dei segmenti di linea perpendicolare?
- 26. Come unire due righe in una riga in sql?
- 27. Selezionare una sola riga di tabella su connessioni parallele alte
- 28. Come per aggiungere più elementi in una sola riga in Python
- 29. Calcolo delle intersezioni tra i segmenti di linea
- 30. Unire significa su un boxplot con una linea (ggplot2)
Ciascuno dei fiumi ha un ID singolo comune? – Simbamangu
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. –