jueves, 12 de mayo de 2016

QGIS: uniendo tablas de datos.

A menudo queremos representar en un mapa algún archivo vectorial pero nos encontramos con que su tabla de atributos es escasa en datos o no contiene aquellos que necesitamos. Y también a menudo sucede que esa información que necesitamos la tenemos en una base de datos aparte. Es entonces cuando debemos fusionar ambos archivos de alguna forma que nos permita disponer de toda la información en aquel archivo con el que deseamos trabajar. En este caso práctico vamos a ver lo que para mi es uno de los procesos más básicos e imprescindibles a la hora de crear nuestros mapas: enriquecer la información de un archivo vectorial con una tabla de datos externa, lo que nos ampliará las posibilidades de representación.
Vamos a utilizar para ello los polígonos de los municipios de España en formato vectorial shp (incluido en la descarga Líneas Límite Municipales) y la base de datos del Nomenclátor Geográfico de Municipios y Entidades de Población en formato mdb Access, ambos disponibles en la sección Equipamiento Geográfico de Referencia Nacional del Centro de Descargas del IGN.

Una vez descargados ambos archivos, los abrimos en QGIS. La base de datos mdb, al constar de varias tablas, nos preguntará cuál de ellas queremos abrir en QGIS: con abrir la tabla municipios nos basta para este caso.
El vectorial shp de polígonos municipales que hemos utilizado es el correspondiente al datum ETRS89.
Ambos abiertos en QGIS y consultando sus correspondientes tablas de atributos tenemos lo siguiente:
Apreciamos rápidamente que ambas tablas comparten como columna de valores comunes el nombre del municipio (llamado NOMBRE en la tabla del vectorial, y NOMBRE_ACTUAL en la tabla mdb). Podríamos haber tenido suerte y que el campo del Código INE fuera también idéntico, pero inexplicablemente está formado por distinto número de dígitos en cada tabla con lo que no es utilizable.
A continuación debemos unir ambas tablas. Para ello abrimos las propiedades de la capa vectorial (que es a la que queremos añadir los campos) y en la pestaña Uniones creamos una nueva unión según se ve en la siguiente imagen:
Creamos una nueva unión desde el símbolo +. En Unir capa obviamente seleccionamos la tabla mdb; en Unir campo y Campo objetivo seleccionamos el campo común de cada una de las dos tablas. Podemos elegir si unir la tabla entera o sólo algunas de las columnas (zona verde) y también el prefijo que distinguirá a las nuevas columnas añadidas (en azul). Pulsamos en Aceptar.
La nueva unión queda añadida a la lista de uniones mostrando sus parámetros básicos. Aplicamos y aceptamos.
Ahora nuestra capa vectorial de polígonos cuenta en su tabla de atributos, además de con sus datos originales, con los nuevos campos que le hemos añadido desde la tabla de datos mdb.
Columnas o campos nuevos añadidos (en amarillo) con el nombre de campo predefinido en el prefijo (verde).
Por lo que, y esto es lo importante, cuando vayamos a modificar el estilo de la capa (graduado, categorizado, etc...) las nuevas columnas de datos están ya disponibles para poder utilizarse en la simbología de capa.
La unión de datos hasta este momento es sólo virtual y se pierde si cerramos alguna tabla, por lo que conviene guardar la capa vectorial como un nuevo archivo shp que mantenga la nueva estructura de la tabla de datos de forma permanente. Simplemente botón derecho sobre la capa y Guardar como...

¿Qué hemos conseguido con esto? Que donde había una tabla de datos con escasa información que apenas podíamos clasificar por ningún dato relevante, tenemos ahora algunos de los datos más importantes para cualquier simbología que queramos aplicar a los municipios: población, superficie, perímetro, altitud...

Jugando ahora con nuestra nueva tabla de datos integrada en el vectorial y el magnífico QGIS nos será muy fácil elaborar interesantes mapas sobre la base de los municipios españoles. Para muestra tres ejemplos:


El origen y formato de la tabla de datos que queremos unir al archivo vectorial puede ser diverso, pero sirva este artículo de idea global sobre las posibilidades de este proceso. Un saludo.

19 comentarios:

  1. En Mac (o al menos yo no lo consigo) no es posible abrir archivos .mdb, pero el proceso se puede hacer con otro formato como .csv
    Enhorabuena por el trabajo.

    ResponderEliminar
  2. Buenas tardes,
    Quisiera saber si puedo, teniendo dos shapes, que la tabla de atributos sea la misma para los dos. Intente hacerlo con la pestaña Uniones pero lo que hace es duplicarme la información. No se si lo estoy haciendo mal o lo que yo quiero no puede hacerse.
    Muchas gracias, saludos.

    ResponderEliminar
  3. Hola, buenas tardes.
    Como se puede cargar en QGIS el archivo .mdb.
    Gracias y un saludo

    ResponderEliminar
    Respuestas
    1. Pues simplemente arrastrando el archivo al escritorio de QGIS ya te aparece el menú para seleccionar la capa o capas a cargar como se ve en este artículo. O también desde el menú "Capa", añadir nueva capa vectorial... y buscando la ruta al archivo. Saludos.

      Eliminar
  4. Hola, buenas noches.
    El "unir campo" y el "campo objetivo" ¿tienen que tener alguna característica en común?
    Quiero añadir una columna con texto y he seleccionado en campo objetivo una cualquiera (también de texto), ya que los datos nuevos a introducir no tienen nada que ver con lo que aparece en el shp utilizado. Las columnas que aparecen son iguales excepto a esa nueva.
    Gracias, un saludo.

    ResponderEliminar
    Respuestas
    1. Obviamente y como se remarca en el cuadro amarillo del principio del artículo esos dos campos deben tener un contenido común, sino es imposible que el programa sepa bajo qué parámetros une el resto de los campos. Saludos.

      Eliminar
  5. disculpen soy nuevo en esto de qgis y pues monte 32 bases de datos para representar a Mexico 1 por estado pero cuando las subo a mapser se mueven en qgis se ven juntas pero mapserver se mueven entonces quiziera hacer un solo mapa de las 32 entidades pero con la herramienta union solo e logrado pegar 2 estados los demas se mueven alguien puede orientarme en como debo unir los estados o como funciona porfas

    ResponderEliminar
    Respuestas
    1. Creo que es imposible ayudarte a manejar QGIS a base de comentarios en un post, y menos aún si eres nuevo con el programa. Deberías buscar algún manual básico del programa por la red y al menos manejar primero las funciones básicas del mismo. De otra forma es casi imposible saber lo que necesitas. Saludos.

      Eliminar
  6. Hola. Consulta, hay manera de unir una tabla excel con la tabla de atributos por medio de un campo tipo texto en común, o solo se realiza con un campo con valor numérico?

    Gracias

    ResponderEliminar
    Respuestas
    1. Hola Anónimo, si lees el artículo del blog ves que en este mismo ejemplo las tablas están unidas a partir de un campo tipo texto. Saludos.

      Eliminar
  7. Hola, Estoy usando el módulo unir atributos por localización, quiero atribuir a cada sección censal su propio código postal, el problema es que la relación que tengo es de muchos a muchos. ¿Hay alguna forma para que el programa me devuelva una tabla en la que me genere para cada sección censal el código postal al que pertenece?, es decir se tiene que dar el caso en el que la sección censal tenga varios códigos postales.

    Gracias y un saludo.

    ResponderEliminar
  8. Hola. Me es imposible añadir el archivo mdb de ninguna de las dos maneras. Gracias

    ResponderEliminar
    Respuestas
    1. Quizá sea tu versión de QGIS... a mi me la abre simplemente arrastrando el archivo mdb al escritorio de QGIS... Si no hay forma puedes convertirla antes a Excel o csv...

      Eliminar
  9. Muchas gracias por la información, me ha sido de gran ayuda.
    saludos

    ResponderEliminar
  10. hola.... quisiera saber si existe la posibilidad de combinar la informacion de un shape de la siguiente forma: suponiendo que a, b y c son campos alfanumericos, crear un campo nuevo con la siguiente configuracion: a-b-c ó a/b/c.

    ResponderEliminar
    Respuestas
    1. Por la expresión que has puesto no se si quieres hacer una resta o una división de los atributos en uno nuevo, o simplemente concatenar los valores con un marcador de separación (- ó /). En cualquier caso es posible con la calculadora de campos y usando la fórmula apropiada. Un ejemplo: si tenemos los campos A B y C y queremos crear un campo nuevo de nombre "combinado" que tenga los tres valores en dicho campo nuevo y separados por un guión, sería: "A"||'-'||"B"||'-'||"C"

      Eliminar
  11. Hola, al hacer una union de datos obtengo el nuevo campo en la tabla de atributos y parce estar bien, hasta que hago la capa permanente. Al abrir la nueva capa guardada pierdo la información que uni a la tabla original.

    ResponderEliminar
    Respuestas
    1. Pues no sé darte una razón, jamás me ha pasado y la gracia de la unión es mantenerla en un archivo, claro... Se me ocurre que, de las dos capas usadas en la unión, estés guardando la que no es, pero es un error tan tonto que lo cito por decir algo.... Saludos.

      Eliminar
  12. pudo solucionar jaguarlocro ?

    yo tengo problema semejante luego de subir mi fichero y convertir en capa de puntos al hacer permanente se pierde la informacion y se crea una columna accion... ni idea por q sucede eso..

    ResponderEliminar