GIS

Calculadora de campos de Qgis para poner valores a partir de cualidades (ejemplo Aptitud)

La tabla de atributos de Qgis todavía es una de las asignaturas pendientes en su desarrollo. No permite arrastrar o copia y pegar muchos valores a la vez, de forma que cuando tenemos muchos registros se complica realizar operaciones. Una forma posible es abrir el archivo .dbf en una hoja de cálculo y luego tener cuidado de volver a ponerla en su sitio. Se puede hacer pero no resulta lo más aconsejable. En gvsig se permite exportar la tabla en .CSV y luego juntar campos, lo que facilita esta operación. mmqgis es un pluging de Qgis que permite exportar la tabla de atributos como CSV y luego volver a importarla, de forma que podemos trabajar datos de la tabla en cualquier hoja de cálculo (Calc, Excel,..) de forma mucho más cómoda que en el editor de tablas. Aquí se explican otros plugins interesantes como Table Manager, que nos permite ordenar las columnas en la tabla de atributos.

En cualquier casos en la mayoría de los casos se puede conseguir casi cualquier cosa utilizando la calculadora de campos, que cada vez es una herramienta más versatil.

Para ver todos los detalles de la calculadora de campo, vienen muy bien explicados aquí y aquí, por lo que no me entretendré en eso. Sino que directamente paso a ver cómo

PONER VALORES DE APTITUD A PARTIR DE CUALIDADES

Para ello utilizaré la capa Siose 2011 del municipio de Gátova, bajada de Terrasit (aquí explico cómo) y simplificada eliminando las columnas que no necesito (4 columnas x 193 registros). En la figura los primeros 39 registros:

Screenshot - 031215 - 13:38:35

La idea es crear una columna con valores numéricos para cada tipo de vegetación según la considere más o menos apta para una actividad concreta.

Para ello editamos la tabla (botón de más a la izquierda) y abrimos la calculadora de campos (botón de más a la derecha). También se pueden ordenar los registros por orden alfabético presionando sobre el nombre.

Los valores de aptitud que queremos poner a cada valor de NIVEL 1 son:

Arbolado forestal 2
Matorral 2
Pastizal 1
Cultivos 1
Coberturas artificiales 0
Terrenos naturales sin vegetación 0

Obviamente hay muchas formas de obtener el mismo resultado, voy a exponer las dos que más me gustan, que son con ILIKE y con CASE_ELSE.

A mi me gusta más la primera porque es más fácil detectar errores y las columnas extra me permiten realizar cálculos desde la hoja de cálculo (sólo tengo que copiar el archivo .dbf en otra carpeta y abrirlo.

Detalles a tener en cuenta en las operaciones:

  • las variables se ponen entre comillas dobles
  • El texto se pone entre comillas simples
  • Los valores numéricos se ponen tal cual
  • Conviene escribir la fórmula en un editor de texto por si no sale bien poder corregirla usando «Actualizar campo existente» y para luego saber cómo se ha hecho (en Qgis no se guarda)·

Utilizando ILIKE

En realidad utilizar LIKE, ILIKE o = es casi lo mismo. Para valores numéricos es lo mismo, aunque en ese caso lo mejor es utilizar =, <,>. Para texto ILIKE tiene la ventaja de no discriminar entre mayúsculas y minúsculas.

La mejor opción desde mi punto de vista es dividir el problema en problemas menores fácilmente revisables, haciendo una columna para Aptitud 2 (A2), otra para Aptitud 1 (A1) y si llegara a hace falta otra para A0.

Para el caso de A2 se puede hacer con OR:

"NIVEL1" ILIKE 'Arbolado forestal'
OR
"NIVEL1" ILIKE 'Matorral'

Para la A1 se hace de la misma manera, cambiando los valores por ‘Pastizal’ y ‘Cultivos’.

Luego, una vez creadas las dos columnas, y comprobado que no queda ningún valor sin utilizar, simplemente hay que operar con ellas multiplicando a cada una por su valor, con lo que nos queda una columna con los valores de aptitud de la capa Siose 11, utilizando los valores de la variable NIVEL1 (Apt_S11N1):

"A1"+2*"A2"

En realidad la columna A0 no hace falta en este caso, pero en ocasiones es útil para comprobar que no nos dejamos nada.

Utilizando CASE_ELSE

Si tengo claro que no voy a tener que corregir valores ni a operar desde hoja de cálculo, puedo hacerlo directamente con el Condicional CASE ELSE

CASE WHEN condition THEN result ELSE result END

Screenshot - 031215 - 15:32:06es decir:

CASE
    WHEN
        "NIVEL1" ILIKE 'Arbolado forestal'
        OR
        "NIVEL1" ILIKE 'Matorral'
    THEN
2
    WHEN
        "NIVEL1" ILIKE 'Pastizal'
        OR
        "NIVEL1" ILIKE 'Cultivos'
    THEN
1
    ELSE
0
END

Suele ser buena idea hacerlo de dos formas diferentes y comprobar que los datos que salen son los mismos, sobre todo cuando hay tantas filas que es imposible comprobarlo de forma manual.

IMPORTANTE: Escribir la fórmula en un editor de texto o copiarla y pegarla en un editor de texto antes de dar a aceptar, de forma que si no sale perfecta la podamos modificar y volver a actualizar el campo.

Referencias

http://docs.qgis.org/2.2/pt_BR/docs/user_manual/working_with_vector/field_calculator.html
http://mappinggis.com/2014/05/como-usar-la-calculadora-de-campos-de-qgis/
http://garmendia.blogs.upv.es/bajarse-capas-terrasit/

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.