Como ya sabrás, una de las operaciones más comunes y básicas en GIS es la adhesión o vinculación de información alfanumérica entre tablas.
En todos los software GIS podemos realizar uniones empleando para ello un campo en común entre las tablas a unir, un campo que debe ser del mismo tipo de dato tanto en la tabla de entrada como en la de unión y cuyos valores en los registros deben ser correspondientes.
Sin embargo, puede ocurrir que este campo coincidente no exista y, por lo tanto, se nos frustra la oportunidad de realizar una unión de tablas con un método sencillo y rápido. Pero no hay que desesperar, si no tenemos ese campo, podemos realizar la vinculación de la información de estas tablas basándonos en una unión espacial o Spatial Join, que se basa en la relación existente entre las entidades geométricas de una y otra capa en el espacio.
Por supuesto y, como no podía ser menos, QGIS cuenta con herramientas que nos permiten realizar este proceso con éxito. En el presente post, no sólo vamos a comentarte las mismas, las compararemos y vamos a mostrarte un ejemplo práctico de cómo se emplearían en un caso real.
Pongamos un ejemplo…
Consideremos que tenemos una capa que contiene una serie de vértices geodésicos que se localizan en una serie de municipios, y cuya información nos gustaría asociar a su tabla de atributos. Sin embargo, no contamos con un campo común o campo llave para realizar una simple unión de tablas.
Para asociar cada vértice geodésico al municipio en el que se encuentra, es necesario acudir a un concepto conocido como “unión espacial” (spatial join) que, en síntesis, asocia a los elementos de un tema las características de los elementos de otro tema con el que tiene algún tipo de relación espacial.
Unir atributos por localización (Processing)
El plugin Processing, anteriormente conocido como fTools, nos proporciona una serie de herramientas para realizar tareas comunes en GIS basadas en análisis vectorial y que, a su vez, va incorporando un conjunto cada vez mayor de herramientas para gestión y análisis de datos espaciales.
Este plugin se encuentra instalado y habilitado por defecto en el núcleo de QGIS, aunque podemos habilitarlo o deshabilitarlo empleando el Administrador de complementos de QGIS.
Este plugin nos proporciona la herramienta Unir atributos por localización que podemos encontrar dentro del menú Vectorial/Herramientas de gestión de datos.
La herramienta nos pide una serie de parámetros:
- Capa vectorial objetivo: Es la capa sobre la que se realizará la unión de atributos.
- Unir capa vectorial: Es la capa a unir.
- Predicado geométrico: Nos permite especificar el tipo de relación espacial que deseamos sobre el que vincular los atributos. Dependiendo del tipo de geometría (punto, línea o polígono) tendremos disponibles unos u otros.
- Precisión: Tolerancia sobre la que realizar la selección (en las unidades del mapa).
- Resumen de atributos: Podemos indicar que, si la relación es de uno a muchos, se tomen los atributos del primer objeto espacial que cumpla el predicado geométrico, o bien, que tome un resumen del total de objetos espaciales que cumplan dicho predicado.
- Estadísticas para resumen: La herramienta nos ofrece la posibilidad de calcular estadísticas como la media, suma, valores máximo y mínimo, etc…
- Tabla unida: Nos permite indicar si en la capa resultado deseamos tener todos los registros de la capa objetivo (tengan o no relación con la capa a unir) o mantener únicamente aquellos que tengan relación porque cumplen el predicado geométrico.
- Capa unida: Aquí especificaremos un nombre y ubicación para la capa resultado de la herramienta.
En la capa resultado se habrán unido los campos procedentes tanto de la capa vectorial objetivo como de la capa vectorial a unir manteniendo los registros que cumplen con el predicado geométrico.
Plugin spatial Join
El plugin spatial Join, es un complemento destinado a realizar combinaciones espaciales de forma más dinámica, sin necesidad de crear una nueva capa. Además, podemos trabajar empleando una expresión y el complemento refFunctions (cuya instalación es obligatoria para poder trabajar con el plugin) desde la Calculadora de Campos. Por otro lado, tenemos disponibles todas las relaciones topológicas estándar para su funcionamiento.
Lo primero que debemos hacer es instalar el plugin, para ello accede al Administrador e Instalador de complementos de QGIS, busca el mismo, e instálalo.
Una vez instalado podrás encontrarlo en el menú Complementos/spatialJoin.
Si lo seleccionas aparecerá un mensaje que indica que, para ejecutar el complemento, es necesario tener instalado el plugin refFunctions.
Vuelve a acceder al Administrador e Instalador de complementos de QGIS, busca el plugin mencionado e instálalo.
Accede al menú Complementos/refFunctions….
Si lo seleccionas aparecerá en pantalla una ventana que nos informa de que se ha instalado en la Calculadora de Campos una serie de funciones analíticas y espaciales para su uso con otras capas.
Si lo deseas, accede ahora a la Calculadora de Campos y observa que se ha instalado un nuevo grupo de funciones denominadas Reference.
Al abrir la herramienta spatialJoin nos solicita los siguientes parámetros:
- Target Layer: Capa vectorial objetivo
- Spatial join type: Tipo de relación espacial que deseamos sobre el que vincular los atributos.
- Layer to join: Capa vectorial a unir.
- Attributes to join: Campos de la capa vectorial a unir que deseamos incluir en la capa vectorial objetivo.
- Dynamic join: Permite consultar datos sobre la unión de forma más rápida, aunque sólo es recomendable para pequeños volúmenes de datos.
- Build Relation: Crea un campo común en ambas tablas.
Si abrimos la capa vectorial objetivo observamos los campos unidos junto con el campo de relación creado por la herramienta.
Ahora te toca a ti elegir…
Si quieres aprender a trabajar con QGIS inscríbete ya a nuestro curso online de QGIS.
Tutor de los cursos de QGIS, QGIS avanzado, QGIS aplicado a Urbanismo y Catastro, PostGIS, Teledetección con QGIS y Google Earth Engine, PostGIS y ArcGIS. Licenciado en Geografía y Master en SIG y Ordenación del Territorio. Echa un vistazo a todos nuestros cursos de SIG online.
Buena herramienta, aunque al parecer solo funciona cuando la relación entre capas a unir es 1 a 1 o 1 a ninguno. En el caso del ejemplo; si para 1 municipio hubieran varios vértices geodésicos, al hacer el spatialJoint, en la tabla de municipios sólo copia los atributos de uno de los vértices. ¿Estoy en lo correcto? ¿Hay alguna otra alternativa?
Hola Ana,
Esta operación es útil también cuando la relación es de 1 a muchos, pero el lado del muchos debe de encontrarse como target layer.
Es decir, si tuvieses varios vértices geodésicos en un municipio, por ejemplo, y deseas que a cada vértice se le relacione con su correspondiente municipio, el target layer sería la capa de vértices.
Un saludo!
Excelente herramienta, yo hice algo similar con PYQGIS… uni una tabla CSV con una capa shape.
aqui el codigo:
import processing
res = processing.runalg(«qgis:joinattributestable»,»c:/ejercicios/areas_geoestadisticas.shp»,»c:/ejercicios/poblacion.csv»,»cve_ent»,»cve_ent»,»c:/ejercicios/union_shp_csv.shp»)
layer = QgsVectorLayer(res[‘OUTPUT_LAYER’], «Capa Unida», «ogr»)
QgsMapLayerRegistry.instance().addMapLayer(layer)
Saludos!
Hola Fidel,
Muchas gracias por tu comentario y aporte, seguro que le será de interés a muchos de los seguidores de nuestro blog.
Un saludo!