Come collegare le linee in una rete?


15

Ho uno shapefile di linee e un altro di poligoni. Quando due o più linee si intersecano con un poligono, dovrebbero essere collegate (spezzate), ma a volte durante la digitalizzazione manuale ciò non si verifica. Devo trovare e correggere tutti questi errori. Ho usato v.cleanda GRASS GIS e ha fatto scattare automaticamente molti vertici, il che era buono, ma alcune di quelle linee disconnesse sono più lontane dalla tolleranza che ho dato e se aumento troppo la tolleranza, inizia a generare altri tipi di errori.

inserisci qui la descrizione dell'immagine

Qualche idea?


1
Unisci spazialmente gli endpoint della polilinea ai poligoni e riassumi i conteggi per poligono. Per ogni poligono contenente più di un endpoint unito, creare una polilinea costituita da segmenti che si irradiano dal centroide di quegli endpoint verso gli endpoint stessi (una "stella"). Unisci le stelle con le polilinee originali. Pulisci il risultato per rimuovere eventuali autointersezioni che si presentano. Ognuno di questi passaggi è supportato (e può essere automatizzato) da GIS completamente capaci. Poiché non ho familiarità con i dettagli di QGIS o GRASS, offro questa soluzione solo come commento.
whuber

ma a volte tutte le linee finiscono fuori dal poligono ...
vascobnunes,

1
Cosa rappresentano queste linee? Se sono fiumi, sono codificati con informazioni extra come nome o ordine di streaming? La rete è diretta (come una rete fluviale) come dire due flussi del primo ordine devono fluire in un flusso del secondo ordine. Immagino che sto cercando di dire che potresti voler mettere un po 'di intelligenza dietro il processo di schiocco per superare il problema con lo schiocco instabile con crescente tolleranza di ricerca.
Hornbydd,

1
Il tuo commento sembra contraddire la domanda. La domanda sembra dire che vuoi catturare vertici che rientrano in un poligono comune. Se un vertice non rientra in un poligono, non si forniscono criteri per come deve essere trattato! Quindi, qual è esattamente la relazione tra i poligoni e le polilinee?
whuber

1
Sono d'accordo con whuber; forse dovresti chiarire la domanda. Sembra che tu voglia linee che sono "nel" poligono, così come "chiudi" ma escludendo quelle che sono "dentro" ma che sono correttamente unite?
Darren Cope,

Risposte:


7

La mia comprensione del problema è la seguente:

Se un endpoint di polilinea interseca un poligono, la polilinea deve essere collegata (aggiungendo o regolando i vertici) a tutti gli endpoint di polilinea aggiuntivi che intersecano lo stesso poligono.

Alcuni endpoint di polilinea non intersecano un poligono, essendo undershoots, ma questi dovrebbero essere collegati come sopra.

Questa risposta si basa su alcune già fornite, ma non è completa in quanto non sono a conoscenza di tutti i comandi QGIS - forse qualcun altro può aggiungere a questo?

  1. Per ogni polilinea, estrarre le coordinate dell'endpoint ( Vettore> Strumenti geometria> Estrai nodi quindi riordina) e calcolare se si trovano all'interno di un poligono ( Vettore> Strumenti di ricerca> Seleziona per posizione ).

  2. Per gli endpoint di polilinea all'interno di un poligono, estendi quell'estremità al centro del poligono (Estrai il centro del poligono usando Vettore> Strumenti geometria> Centroide poligonale , non sei sicuro della modifica della linea, anche se potresti essere in grado di lavorare con i vertici della polilinea come punti e aggiungerne altri con la numerazione appropriata prima di ricostruire la polilinea modificata utilizzando il plug-in Punti su tracciati)

    Dici che ci possono essere situazioni in cui alcune o tutte le linee sono state correttamente collegate, in queste situazioni (identificabili da punti finali della polilinea coincidenti) potresti scegliere di usare la posizione del punto finale coincidente invece del centroide del poligono come punto da estendere eventuali polilinee non connesse aggiuntive per quel poligono.

  3. Per gli endpoint di polilinea che ricadono al di fuori di un poligono, estendere quell'estremità della polilinea al centro del poligono più vicino. Ancora una volta, non sono sicuro del calcolo del poligono più vicino, anche se il modulo GRASS v.distance sembra fare il trucco.


questa è una buona logica per la soluzione del problema. Ho anche ottenuto qualcosa del genere con la risposta di alexgleith. Ma ero bloccato nell'operazione di "estendere quell'estremità della polilinea al centro del poligono più vicino". La domanda ora è come posso farlo? Se uso v.clean.snap sui centroidi dei poligoni, sposterebbe comunque tutti i vertici che non sono endpoint ...
vascobnunes,

Un approccio sarebbe quello di convertire le polilinee in punti come descritto e, se necessario, aggiungere un punto aggiuntivo all'inizio o alla fine di una determinata linea, come dettato dalla posizione del punto iniziale o finale esistente. La posizione del punto aggiunto sarebbe il centroide del poligono e il punto verrebbe attribuito con un numero di vertice di -1 o 1000000 per posizionarlo all'inizio o alla fine della polilinea. Ciò consentirebbe quindi di ricostruire le polilinee utilizzando lo strumento Punti sul percorso
Andy Harfoot,

2

Penso che potrei farlo con qualche algoritmo personalizzato ... Nota bene come vorresti implementarlo, ma penso che funzionerebbe.

Per ogni linea, per ogni punto finale, traccia un punto in poligono per il vertice nel punto finale e collegalo al poligono.

Quindi, per ogni poligono, se è presente più di un punto finale collegato, li unirei (spostandoli) tutti alla coordinata media, o forse al centroide del poligono.

È abbastanza semplice. Ma non disponibile negli operatori standard. Penso che potrebbe essere fatto in ArcGIS con un tempo di programmazione di giorni.

Un'altra nota, nell'immagine che hai pubblicato, una delle linee è al di fuori del poligono ... Potresti gestirlo in un modo più semplice semplicemente trovando il vertice più vicino a ciascun vertice finale, assicurando che la vicinanza sia reciproca (penso che sia necessario, in modo che i vertici si spezzino solo in un modo), quindi è possibile spostarli nella posizione media dei vertici.


1

Problema interessante! Non riesco a pensare a un modo per eseguire automaticamente lo snap, ma ecco un passaggio per identificare le aree per almeno cercare la correzione manuale:

  • Aggiungi una nuova colonna al tuo livello di linea e impostala uguale a "1" per tutte le funzioni.
  • In Vettore> Attributi join per posizione, imposta il livello Target sul livello poligono e il livello linea come livello di unione. Quindi seleziona "Prendi il riepilogo delle caratteristiche intersecanti" e fai clic su "Somma". Assegna un percorso per il file di output e "OK".
  • Il file poligonale risultante sarà il tuo livello poligonale originale, ma con alcuni campi aggiuntivi. Il campo SOMMA è quello che vuoi; quando è 2, significa che è possibile eseguire lo zoom su di esso e scattare manualmente le funzionalità.

A seconda della situazione (numero di funzioni, numero presente in questa situazione rispetto a quelli che non lo sono, ecc.), Ciò potrebbe farti risparmiare un po 'di tempo.

MODIFICA: potresti anche voler utilizzare i poligoni con una somma di 2 per creare un sottoinsieme dei livelli di linea, quindi eseguire la pulizia su quelli con una tolleranza maggiore per non modificare le altre funzionalità.


Avevo già fatto qualcosa del genere. Ho anche usato v.net per recuperare i nodi per le linee e ho fatto una selezione spaziale dei poligoni corrispondenti ai nodi. Trovo molti errori per correggere usando questo, ma ho ancora 3 grossi problemi: 1) ci sono migliaia di errori da correggere manualmente, il che richiede tempi lunghi; 2) Non ottengo tutti gli errori che causano in alcuni casi le linee o i nodi non "toccano" nemmeno i poligoni; 3) ottengo errori che non sono errori, perché quando due linee si collegano correttamente vengono anche selezionate.
vascobnunes,

0

una volta che hai gli endpoint, farei un diagramma a ragno prendendo i centroidi dei poligoni come strutture e gli endpoint delle linee vicine come obiettivi. Esegui l'analisi del diagramma a ragno e di conseguenza avresti un segmento per ogni polilinea.

Funzionerebbe anche per coloro che finiscono fuori dai poligoni. Come farlo in QGIS non lo so, mi dispiace, ma lo farei nei prodotti ESRI che conosco bene. Questo è quello che ho capito quando Whuber, nella prima risposta, ha suggerito di costruire una "stella".

Sono abbastanza sicuro che ci sono persone qui che sanno come eseguire tale analisi in QGIS


4
Benvenuto in GIS Stack Exchange! Ho notato che la tua risposta ha attirato alcuni voti negativi e sospetto che ciò sia dovuto al fatto che hai suggerito un'alternativa alla tecnologia che sta utilizzando il richiedente (GRASS / QGIS). La mia raccomandazione sarebbe di inserire tali suggerimenti come commenti anziché come risposte e se l'interlocutore sembra interessato, trasferire le informazioni in una risposta.
PolyGeo
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.