Unir atributos desde el punto más cercano en QGIS

29

Tengo dos capas con puntos, llámelas A y B, cada una con diferentes atributos.

Para cada punto en AI queremos unir todos los atributos del punto más cercano en B.

Idealmente, esto también incluiría un campo que mide la distancia entre ambos puntos.

Sé cómo hacerlo en ArcGIS: haga clic con el botón derecho en la capa A> une y relaciona> une, luego une datos basados ​​en la ubicación espacial y elige unir atributos desde el punto más cercano.

No pude encontrar una funcionalidad similar en QGIS. ¿Algún puntero?

Fred
fuente

Respuestas:

26

Usando la "Matriz de distancia" puede calcular el punto más cercano. ¡Asegúrese de que ambas capas estén en el mismo CRS! Luego, puede cargar los resultados y usarlos para unir las tablas A y B.

En "Matriz de distancia", elija: "Matriz de distancia lineal" y "use solo los k puntos objetivo más cercanos: 1"

ingrese la descripción de la imagen aquí

Cargue el archivo CSV con "Agregar capa vectorial" y una las capas en las propiedades de capa de la capa A: ficha Unir.

ingrese la descripción de la imagen aquí

Y el resultado:

ingrese la descripción de la imagen aquí

bajo oscuro
fuente
Si desea tener las distancias entre los puntos dentro de una capa usando la matriz de distancia, debe cambiar k = 2, debido a este problema conocido: hub.qgis.org/issues/4761
Celia
1
@underdark Parece que esta solución ya no funciona. Puedo crear el archivo matrix.csv y unirlo a mi primera capa. En su ejemplo, agregó una segunda unión donde adjunta la segunda capa a la primera, según el TargetID de la matriz. Pero los campos unidos no se muestran en el cuadro de diálogo, por lo que no puedo seleccionar TargetID. Por supuesto, primero puedo guardar como capa y luego hacer la segunda unión ...
Bernd V.
13

El complemento NNJoin debería hacer el trabajo. Para cada entidad de la capa de entrada, agrega todos los atributos de la entidad más cercana en la capa de unión y también agrega un atributo de distancia con la distancia a esta entidad.

Håvard Tveite
fuente
Funciona perfectamente. Más rápido que la respuesta aceptada. Tenga en cuenta que la respuesta aceptada es de 2011.
juminet
Al menos, hoy es mucho mejor que la respuesta aceptada. Mucho, mucho más rápido.
cag
4

Si puede vivir con solo unirse a un solo atributo de su capa "B", eche un vistazo a la herramienta "Distancia del eje" del complemento mmqgis .

Si necesita el resto de los atributos "B", debería poder unir el resto de sus atributos "B" a esta capa.

Si lo desea, también puede generar líneas de A a B. Esto es útil para visualizar las distancias y direcciones entre las características asociadas.

RyanDalton
fuente
0

Otro enfoque usando el complemento refFunctions .

(1) Conjunto de datos de muestra

ingrese la descripción de la imagen aquí

(2) Abra una tabla de atributos de la capa que tenga más características ( points_bcapa en este ejemplo) para que no se pierdan pares. Crea nuevos campos.

  • Campo de identificación de la otra capa: geomnearest('points_a', 'id_a')
  • Campo de distancia de los pares detectados: geomnearest('points_a', '$distance')

ingrese la descripción de la imagen aquí

Kazuhito
fuente
-6

Uso de QGIS 1.7 Vector> Gestión de datos> Unir atributos por ubicación

ingrese la descripción de la imagen aquí

Mapperz
fuente
3
También pensé en esto, pero cuando lo probé, solo funcionó para coincidencias exactas, como el polígono de puntos. No encontró el punto más cercano a otro punto. Probado en v1.7
RyanDalton
1
Tengo cero partidos. Esto no funciona.
Fred