Unione di linee con endpoint leggermente diversi in QGIS


22

In QGIS, ho due righe. Gli endpoint sono vicini l'uno all'altro, ma non del tutto allineati. Vorrei trasformare le due linee in una, con i due punti finali uniti in punti medi.

Il più vicino che sono stato in grado di venire è con "Unisci funzionalità selezionate". Questo mi dà una caratteristica, ma è composta da due linee disgiunte: non c'è linea tra gli endpoint.

Sto cercando qualcosa che si comporta in modo simile alla funzione Percorsi di unione di Illustrator (Oggetto> Percorsi> Unisci).

QGIS lo fa?

Risposte:


12

Risposta rapida: no! Non esiste uno strumento del genere per eseguire tale operazione direttamente sul livello (il plug-in "Unisci due linee" richiede l'intersezione).

Potresti farlo per un livello molto semplice ruotando le linee in punti (estrarre nodi) quindi unendo con points2one (output di linea) ma questo sarebbe MOLTO più lento della semplice modifica manuale:

  1. Assicurati di aver attivato lo snap (Impostazioni | Opzioni di snap ...) per il tuo livello di linea (5 pixel per me funzionano bene).
  2. Crea una nuova linea da un endpoint all'altro.
  3. Seleziona tutte e tre le linee (le due linee originali + la nuova) e uniscile (Modifica | Unisci funzioni selezionate o pulsante della barra degli strumenti).

1
Grazie. Ho avuto solo poche righe da unire, quindi è stato facile e veloce. (La risposta di @Michael Markieta sembrava più adatta a situazioni complesse.)
Evan,

14

Puoi farlo con una combinazione di QGIS e GRASS.

  1. Importa il tuo livello vettoriale in un mapset GRASS (Grass | File> Importa dati vettoriali)
  2. Apri il tuo mapset in QGIS (QGIS | Plugin> GRASS> Apri mapset)
  3. Aggiungi livello vettoriale dal tuo set di mappe GRASS al tuo progetto QGIS (QGIS | Plugin> GRASS> Aggiungi livello vettoriale GRASS)
  4. Usa v.clean.snap (QGIS | Plugin> GRASS> Apri strumenti GRASS> Elenco moduli> v.clean.snap)

Regola la "soglia" di v.clean.snap per ottenere lo snap al vertice corretto nell'area di studio.


10

Presumo che tu voglia unire due segmenti di linea in una linea. inserisci qui la descrizione dell'immagine

Ecco come l'ho fatto ...

  • Permettere la modifica.
  • Attiva snap (Impostazioni -> Opzioni di snap ...) inserisci qui la descrizione dell'immagine
  • Seleziona lo strumento nodo nodo.inserisci qui la descrizione dell'immagine
  • Fare doppio clic vicino alla fine di una delle linee per aggiungere un nodo. inserisci qui la descrizione dell'immagine
  • Trascina il nodo alla fine per agganciarlo alla fine dell'altra linea inserisci qui la descrizione dell'immagine
  • Seleziona entrambe le linee
  • Unisci i loro attributi (non puoi creare una riga se hanno attributi diversi)inserisci qui la descrizione dell'immagine
  • Unisci le due funzionalitàinserisci qui la descrizione dell'immagine

Ciò dovrebbe comportare una riga. inserisci qui la descrizione dell'immagine


Tutto bene. Ma che ne dici di un set di dati di 22.000 righe? Non posso fare questo manualmente ...
FaCoffee


3

Se intendi che la tua singola funzione è composta da un MULTILINESTRING anziché da un singolo LINESTRING, puoi facilmente risolverlo se stai usando un database Postgis:

update your_table set your_geo_column = ST_LineMerge(your_geo_column);

Se vuoi che solo 1 riga faccia questo, dovresti aggiungere WHERE id = your_row_id ovviamente.


2

Inoltre qualcuno potrebbe provare:

  1. salva .shp come .dxf
  2. apri .dxf con DraftSight
  3. unire parti di polilinea
  4. riaprire .dxf con qgis e salvare come .shp
  5. dal menu Vector -> Strumenti geometria -> Linee ai poligoni

2

Ho appena fatto questo con QGIS 3.4.0, usando il plug-in Join Multiple Lines menzionato da tnagel sopra (installa sotto il menu Vector> Join Multiple Lines). Ha funzionato bene per unire circa 60 frammenti di tracciato in circa 20 tracciati. Più frammenti hai e più ampia è l'area che coprono, meno pratico è questo, poiché devi guardare i risultati per i problemi (tnagel potrebbe aver avuto uno dei problemi che descrivo).

Seleziona le linee che vuoi unire, fai clic sulla voce di menu e le unisce (puoi selezionare quante linee vuoi, ma ...), anche se le estremità sono distanti un miglio, ottieni una linea retta dal fine di uno alla fine dell'altro che li collega, quindi assicurati che le tue estremità siano abbastanza vicine in modo da essere contento dei risultati (ho usato la punta in un altro post per contrassegnare le estremità delle mie linee con dei pennarelli, quindi erano facili per vedere (Proprietà> Simbologia> aggiungi una linea di marcatore e ingrandisci il simbolo abbastanza da poterlo vedere facilmente> seleziona il pulsante di opzione "solo sull'ultimo vertice" (e, se vuoi, aggiungi un'altra linea di marcatore con un simbolo diverso e seleziona "prima solo vertice ")).

Inoltre, le linee possono apparentemente essere direzionali. Quindi devi guardare (per esempio) che l'estremità più meridionale della linea A non si è unita con l'estremità più meridionale della linea B al di sotto di essa (un'altra lunga linea retta dove non la vuoi).

Ho scoperto che, quando è successo, ho potuto "annullare" e utilizzare "Inverti linea" nella barra degli strumenti di elaborazione avanzata per invertire la direzione di una linea da un'estremità all'altra (non cambia dove si trova la linea, capovolge solo l'inizio della linea con la fine della linea), quindi unire nuovamente le linee.

Un aspetto positivo è che le modifiche / modifiche vengono salvate nel livello esistente, quindi non è necessario salvare i risultati come nuovo shapefile (eseguire prima un backup).

Sono costantemente sorpreso dal lavoro svolto dagli sviluppatori di core e plugin di QGIS. Mostra cosa possono fare gli esseri umani intelligenti e costruttivi quando decidono di lavorare insieme. Grazie!


0

Utilizzando OpenJUMP (Plus Edition):

  1. File> Apri file
  2. Plugin> Topologia> Pulizia della topologia di rete ...
  3. Fare clic con il tasto destro del mouse sul nuovo livello (fisso): salvare il set di dati come ....

Questo è il risultato: inserisci qui la descrizione dell'immagine


0

Nel mio caso le linee erano in strati diversi e con attributi diversi. Ho unito i livelli con mmqgis e quindi ho unito le linee nel passaggio successivo con la tecnica di aggancio e fusione delle linee.

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.