Unire gli attributi dal punto più vicino in QGIS?


29

Ho due livelli con punti, li chiamo A e B, ognuno con attributi diversi.

Per ogni punto in AI vuoi unire tutti gli attributi dal punto più vicino in B.

Idealmente ciò includerebbe anche un campo che misura la distanza tra entrambi i punti.

So come farlo in ArcGIS: fare clic con il tasto destro del mouse sul livello A> join e relativi> join, quindi unire i dati in base alla posizione spaziale e scegliere di unire gli attributi dal punto più vicino.

Non sono riuscito a trovare funzionalità simili in QGIS. Qualche puntatore?

Risposte:


26

Usando "Matrice della distanza" puoi calcolare il punto più vicino. Assicurati che entrambi i livelli siano nello stesso CRS! Quindi, è possibile caricare i risultati e usarli per unire le tabelle A e B.

In "Matrice della distanza" scegli: "Matrice della distanza lineare" e "usa solo i punti target k più vicini: 1"

inserisci qui la descrizione dell'immagine

Caricare il CSV utilizzando "Aggiungi livello vettoriale" e unire i livelli nelle proprietà dei livelli del livello A: scheda Unisci.

inserisci qui la descrizione dell'immagine

E il risultato:

inserisci qui la descrizione dell'immagine


Se vuoi avere le distanze tra i punti all'interno di uno strato usando la matrice distanza, dovresti cambiare k = 2, a causa di questo problema noto: hub.qgis.org/issues/4761
Celia,

1
@underdark Sembra che questa soluzione non funzioni più. Sono in grado di creare il matrix.csv e unirlo al mio primo livello. Nel tuo esempio hai aggiunto un secondo join in cui colleghi il secondo livello al primo, in base al TargetID della matrice. Ma i campi uniti non mi vengono mostrati nella finestra di dialogo, quindi non posso selezionare TargetID. Ovviamente posso prima salvare_come il livello e poi fare il secondo join ...
Bernd V.

13

Il plugin NNJoin dovrebbe fare il lavoro. Per ogni funzione del livello di input aggiunge tutti gli attributi della funzione più vicina nel livello di join e aggiunge anche un attributo di distanza con la distanza a questa funzione.


Funziona perfettamente. Più veloce della risposta accettata. Si noti che la risposta accettata è dal 2011.
juminet,

Almeno oggi è molto meglio della risposta accettata. Molto molto più veloce.
cag

4

Se riesci a vivere semplicemente unendo un singolo attributo dal tuo livello "B", dai un'occhiata allo strumento "Hub Distance" dal plugin mmqgis .

Se hai bisogno del resto degli attributi "B", dovresti essere in grado di unire il resto dei tuoi attributi "B" a questo livello.

Se lo si desidera, è anche possibile generare facoltativamente linee dalla A alla B. Questo è utile per visualizzare le distanze e le direzioni tra le funzioni associate.


0

Un altro approccio che utilizza il plugin refFunctions .

(1) Set di dati di esempio

inserisci qui la descrizione dell'immagine

(2) Apri una tabella degli attributi del layer che ha più funzionalità ( points_blayer in questo esempio) in modo da non perdere nessuna coppia. Crea nuovi campi.

  • Campo ID dell'altro livello: geomnearest('points_a', 'id_a')
  • Campo di distanza delle coppie rilevate: geomnearest('points_a', '$distance')

inserisci qui la descrizione dell'immagine


-6

Utilizzando QGIS 1.7 Vector> Gestione dati> Unisci attributi per posizione

inserisci qui la descrizione dell'immagine


3
Ho pensato anche a questo, ma quando l'ho provato, ha funzionato solo per corrispondenze esatte, come il punto poligono. Non ha trovato il punto più vicino a un altro punto. Testato nella versione
1.7

1
Ho zero partite. Questo non funziona.
Fred,
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.