Unisci gli attributi del punto e del livello di linea per posizione (distanza più vicina) in QGIS


13

Il mio problema è il seguente: ho uno shp di linea (livello target) e uno shp di punto (layer join). il secondo (livello punti) contiene un attributo a cui voglio unire un livello linea basato sulla distanza più vicina alla linea. Punti e linee non si intersecano

Posso farlo con ArcGIS e l'unione spaziale (opzione di corrispondenza: la più vicina), ma non so come posso ottenere questo risultato in QGIS.


3
C'è uno strumento per fare Partecipa per posizione ma non ha un'opzione "più vicino". Non so se c'è qualche soluzione alternativa. In generale, ti preghiamo di valutare per supportare lo sviluppo delle tue opzioni / strumenti preferiti mancanti, ed è anche in questo modo che gli utenti possono aiutare a far crescere questo software.
Giovanni Manghi,

Risposte:


8

Non credo che ci sia una funzione QGIS 'core' per questo. Tuttavia, installa il plug-in MMQGIS e usa lo strumento 'hub distance'. Scegli i punti come livello "Punti di origine" e le linee come "Livello hub di destinazione" e imposta "Tipo forma di output" su "Linea su hub". Questo ti darà uno shapefile di linee (con lunghezza) che uniscono le funzionalità più vicine. Convenientemente, aggiunge anche l'ID della funzione più vicina alla tabella degli attributi.

Modifica / commento: questo approccio funziona bene se ci sono meno punti rispetto alle linee, oppure una situazione da linea a punto uno a uno. Avere più punti che linee complica le cose. Lo strumento 'Hub Distance' aggiunge l'ID della funzione di linea alla tabella degli attributi del punto come 'HubName' insieme alla distanza tra il punto e il centro della linea come 'HubDist'. Se ci sono più punti che linee, è necessario un lavoro aggiuntivo per determinare all'interno di ciascun sottoinsieme di punti (quei record multipli collegati a ciascun hub di linea) quale di questi è il più vicino a ciascuna linea e / o quale è uno con l'insieme desiderato di attributi da unire alla linea.


questa dovrebbe essere contrassegnata come risposta, con riserva di modifiche minori di "righe" v "punti"
Willy,

1
"Distanza mozzo" non è lo strumento giusto se "distanza più vicina alla linea" è il criterio. Il codice mmqgis rivela che la distanza del mozzo utilizza un'approssimazione della geometria del "mozzo". I calcoli della distanza (mmqgis_distance) prendono due punti come parametri. Ecco il codice che fa l'approssimazione della geometria dell'hub in mmqgis_library.py: "feature.geometry (). BoundingBox (). Center ()". Ciò significa che viene utilizzato il centro del rettangolo di selezione della geometria anziché la geometria reale. Quindi, se "distanza più vicina alla linea" deve essere il criterio, GRASS v.distance o il plugin NNJoin sono più adatti.
Håvard Tveite,

5

A tale scopo è possibile utilizzare la funzione GRASS v.distance . In QGIS è possibile accedere alla funzione tramite il plug-in GRASS (la versione di elaborazione attualmente non funziona). Il plug-in QGIS di NNJoin potrebbe essere un'alternativa più semplice.


3

Il plug-in NNJoin non mi ha mai deluso e funziona bene con set di dati di grandi dimensioni .

Plugin> Installa: NNJoin> NNJoin> scegli il livello di input e unisciti al livello> Quindi fai clic su join.

Esamina i risultati dal nuovo livello di output con la tabella degli attributi. Avvertenza: assicurarsi che entrambi i livelli utilizzino la stessa proiezione spaziale, altrimenti i risultati saranno vuoti.


2

Nel 2019 questo potrebbe essere possibile con lo strumento ZGibar 3 di QGIS "Unisci gli attributi più vicino". Questo strumento ti consente di trovare la funzione più vicina e di unire gli attributi selezionati. È anche possibile effettuare un join uno-a-molti, se si specifica la distanza massima e il numero massimo di vicini più vicini.

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.