jump to navigation

Categorización en QGIS 07.8.15

Posted by Migsar in Computación, GIS, Tecnología.
Tags: , , , , , , , ,
trackback

Objetivos:

  1. Categorizar una capa vectorial para convertirla en raster
  2. Realizar comparaciones en la calculadora raster

Para esto hemos seleccionado tres capas vectoriales:

  • Polígonos de localidades urbanas (INEGI → Geografía → Marco geoestadístico → Polígonos de localidades urbanas).
  • Isotermas medias anuales (Conabio → Portal de geoinformación → Climatología → Temperatura → Isotermas medias anuales)
  • Precipitación media anual (Conabio → Portal de geoinformación → Climatología → Precipitación → Precipitación media anual)

La idea es poder responder preguntas como las siguientes:

  • ¿Existe una ciudad en la republica en que llueva demasiado y sea fría?
  • ¿En qué ciudad podría vivir si no me gusta la lluvia y me gusta el calor?
  • ¿Cuál sería una buena ciudad para un invernadero, con clima cálido y lluvioso todo el año?
  • ¿Existe alguna ciudad templada en Durango?

Por supuesto, hay cierto grado de subjetividad en esto, para unos caluroso puede ser frío para otros, igual sucede con la humedad, es por eso que es importante saber categorizar.

Lo primero es reproyectar las capas, el INEGI usa un sistema raro ITRF92, seguramente habrá razones de peso para haberlo escogido pero si el GPS usa WGS84, prefiero este último. Lo mejor es crear una nueva carpeta con el nombre del sistema y guardar ahí nuestras capas reproyectadas, de paso podemos usar nombres menos crípticos.

Empecemos con las localidades urbanas, podríamos hacer simplemente una capa que dijera si es localidad urbana o no, pero es mejor ponerla por estados. La tarea es bastante sencilla, la tabla de atributos tiene un atributo llamado CVE_ENT, es decir, clave de entidad, sin embargo, necesitamos que sea entero, así que creamos un nuevo atributo llamado “estado”, con valor numérico.

  1. Abrir tabla de atributos de localidades urbanas.
  2. Activar el modo de edición (ícono de lápiz a la izquierda) y abrir calculadora de campos (ícono de abaco a la derecha).
  3. Escribir en el espacio para el valor to_int(“CVE_ENT”).

tut001

tut002

to_int() es una función que trabaja sobre el campo contenido entre paréntesis y convierte su valor en entero. Ahora necesitamos convertirlo a imagen, para esto usamos la función rasterize en el menú de raster → conversion y en el campo de atributo de campo usamos “estado”. No hay que olvidar guardar la tabla de atributos y salir del modo de edición antes de hacer esto.

Puede que se vea todo obscuro, eso es a causa del estilo, es necesario usar SingleBand Pseudocolor y crear 33 valores, el del 0 ponerlo transparente, que es el espacio vacío, podemos si sabemos que trabajaremos mucho con imágenes del INEGI cambiar los nombres de las clases y guardar el estilo. Al convertir nuestros vectores en imágenes perdimos la información asociada a los polígonos pero ganamos la facilidad de hacer ciertas comparaciones.

tut003

Ya tenemos nuestra capa raster con las localidades urbanas por estado, ahora necesitamos algo similar on las otras dos capas. Como se mencionó anteriormente, frío, templado y caluroso son un poco relativos y es en esa categorización en la que radica la fuerza de la calculadora de campos. Empecemos con la temperatura, en Conabio aparecen las isotermas en categorías desde -2 hasta más de 28 grados Celsius, los intervalos no son regulares, algunos son de dos, otros de tres y algunos bastante ambiguos, como el de menor a -2 grados y el de mayor a 28 grados. Para mí el frío empieza abajo de los 14 grados, incluso podría ser 12, pero para fines del tutorial queda en 14 y el calor empieza en 24, es decir, tenemos sólo tres categorías, frío, templado y calor, dejaremos en una cuarta las que mencioné como ambiguas. Esto se hace también con la calculadora de campos pero ahora utilizaremos la estructura CASE. Al abrir las tablas de atributos notamos que ya tienen cierta clasificación, incluso uno de los atributos puede convertirse a número de modo similar al anterior, sin embargo, se trata de proponer nuestro criterio de temperaturas.

  1. Abrir tabla de atributos de localidades urbanas.
  2. Activar el modo de edición (ícono de lápiz a la izquierda) y abrir calculadora de campos (ícono de abaco a la derecha).
  3. Escribir en el espacio para el valor:

CASE
WHEN ( "TA_RANGO" = 'DE -2 A 5' OR "TA_RANGO" = 'DE 5 A 6' OR "TA_RANGO" = 'DE 6 A 8' OR "TA_RANGO" = 'DE 8 A 10' OR "TA_RANGO" = 'DE 10 A 12' OR "TA_RANGO" = 'DE 12 A 14' ) THEN 1
WHEN ( "TA_RANGO" = 'DE 14 A 16' OR "TA_RANGO" = 'DE 16 A 18' OR "TA_RANGO" = 'DE 18 A 20' OR "TA_RANGO" = 'DE 20 A 22' OR "TA_RANGO" = 'DE 22 A 24') THEN 2
WHEN ( "TA_RANGO" = 'DE 24 A 26' OR "TA_RANGO" = 'DE 26 A 28') THEN 3
ELSE 0
END

tut004

Puede parecer demasiado complejo, sin embargo, es bastante fácil de escribir con la ayuda de la calculadora de campos porque al dar doble click en la estructura CASE ELSE la copia en la pantalla y para la variable al dar click aparece en la ventana de la extrema derecha la opción de elegir los valores únicos, que también al dar doble click copia automáticamente al editor. Además, en tiempo y procesamiento la demanda a la computadora es mucho menor que con otras operaciones.

Para la lluvia haremos exactamente lo mismo, como tengo menos idea de que cantidad sea correcta, pero me gustan los días lluviosos de vez en cuando diremos que de 0 a 400mm es seco, de 400 a 1500 es agradable y más de 1200 es locura. El punto de aquí no es establecer un criterio científico sino saber categorizar. Podemos ver que para la precipitación existe el valor Cov_id que corresponde a los rangos, en este caso usaremos ese para agruparlos, usaremos una notación un poco diferente, pues está permitido poner más de una vez el mismo resultado en el when y a algunos les parecerá más claro así:

CASE
WHEN "COV_ID" IS 1 THEN 1
WHEN "COV_ID" IS 2 THEN 1
WHEN "COV_ID" IS 3 THEN 2
WHEN "COV_ID" IS 4 THEN 2
WHEN "COV_ID" IS 5 THEN 2
WHEN "COV_ID" IS 6 THEN 2
ELSE 3
END

Aquí podemos ver varias cosas, la primera es que si quisieramos la misma categoría podríamos hacer el raster directamente con “COV_ID” pero la técnica es útil incluso para reagrupar datos que ya están categorizados, la segunda, es que este método es mucho más legible que el anterior y, finalmente, que si no hay posibilidades de un dato fuera del rango se puede usar else para evitar comparaciones, en este caso no puede llover menos de 0mm y todo lo que sea mayor que “COV_ID” = 6 es locura, no hace falta escribirlo.

Al convertir a raster decidí utilizar resolución de 6000 pixels cuadrados, es necesario entender que el crecimiento del tamaño es cuadrático, es decir, para 3000 pixels el tamaño de la imagen sería de 3000 x 3000 x 1 byte = 9000000 bytes = 9Mb, para 6000 pixels se convierte en 6000 x 6000 x 1 byte = 36000000 bytes = 36Mb, así, duplicar el lado hace que el tamaño crezca cuatro veces. Por supuesto esto es el peso de una imagen sin compresión con 1 sóla banda de color de 1 byte.

Para saber el nombre de las ciudades tendría que tenerse activada la capa vectorial y verlo, pero para responder las preguntas se usa la calculadora raster, creando una nueva capa de máscara. La calculadora raster funciona con operaciones lógicas.

tut008tut007tut009

¿Existe una ciudad en la republica en que llueva demasiado y sea fría?

Localidad > 0
Precipitación = Diluvio (3)
Temperatura = Frío(1)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 1) AND ("precipitacion@1"=3)

tut010

El mapa parece obscuro pero al cambiar el estilo para que el valor 0 sea negro y el 1 blanco se ven un par de puntitos:
Tenejapa, en Chiapas
Tetelzingo, Acajete, Tlacolulan, Huayacocotla en Veracruz

Los Reyes, Santa Ana Tzacuala, Zacualtipán, Tianguistengo y Xochicoatlán en Hidalgo
Honey en Puebla

¿En qué ciudad podría vivir si no me gusta la lluvia y me gusta el calor?

Localidad > 0
Precipitación = Seco (1)
Temperatura = Caliente(3)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 3) AND ("precipitacion@1"=1)

Salieron menos de las que uno pensaría, pero un poco más que en el anterior, la más grande es Los Mochis en Sinaloa, le sigue Ciudad Obregon en Sonora y, aunque parezca extraño también hay en el sur, Progreso y Chicxulub en Yucatán.

¿Cuál sería una buena ciudad para un invernadero, con clima cálido y lluvioso todo el año?

Localidad > 0
Precipitación = Diluvio (3)
Temperatura = Caliente(3)

("localidadesUrbanasPorEstado@1" > 0) AND ("isotermas@1" = 3) AND ("precipitacion@1"=3)

Con lluvia y calurosas hay muchas en el sur de la república, entre las más grandes están Veracruz, Coatzacoalcos, Minatitlán y Villahermosa, San Juan Bautista Tuxtepec, Playa del Carmen y Cozumel.

¿Existen ciudades templadas o frías en Durango?

Localidad = Durango(10)
Temperatura = Fría(1)
Temperatura = Templada(2)

Aquí se utiliza un truco, un poco largo, pero necesario a falta de condicionales:

(("localidadesUrbanasPorEstado@1" = 10) AND ("isotermas@1" = 1))*1 + (("localidadesUrbanasPorEstado@1" = 10) AND ("isotermas@1" = 2))*2

Existen dos ciudades frías en Durango, El Salto y La Ciudad (ambas se ven muy pequeñas pero el INEGI las considera ciudades, también pueden ser cabeceras municipales) y varias templadas, entre ellas la capital, Victoria de Durango, y Gomez Palacio/Lerdo.
Las operaciones binarias generan valores 0 para falso y 1 para verdadero, al hacer la suma funciona como un OR lógico. Además para que tome valores diferentes de 0 se multiplican los resultados verdaderos de la operación binaria por el valor que se desea que tome, que puede ser una variable.

Anuncios

Comentarios»

No comments yet — be the first.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: