5 votos

Comparar dos extensiones raster en QGIS

Tengo dos cuadrículas, la cuadrícula A representa las extensiones observadas de inundaciones y la cuadrícula B representa las extensiones simuladas de un modelo hidráulico. Los rásteres tienen el mismo alcance y tamaño de cuadrícula.

Quiero poder comparar cada píxel y crear un nuevo ráster con 4 valores únicos (A/B/C/D) equivalente a la tabla a continuación para mostrar la diferencia entre los dos rásteres:

ingresar descripción de la imagen aquí

Si esto fuera un problema de una calculadora de campo de shapefile, usaría una lógica de CASO como la siguiente, pero estoy luchando por identificar un equivalente basado en ráster de QGIS. ¿Alguien puede sugerir algo que pueda intentar?

CASO
    CUANDO "Modelado" > 0 Y "Observado" > 0 LUEGO D
    CUANDO "Modelado" = 0 Y "Observado" > 0 LUEGO C
    CUANDO "Modelado" > 0 Y "Observado" = 0 LUEGO B
    CUANDO "Modelado" = 0 Y "Observado" = 0 LUEGO A
FIN

0 votos

Hola, ¿has probado la Calculadora de Raster? Puedes agregar muchas expresiones diferentes con una sintaxis similar a la del Calculadora de Campo vectorial.

0 votos

Por lo que yo veo, la calculadora de raster estándar no admite declaraciones CASE/ELSE o IF/ELSE. La calculadora de cuadrícula de SAGA admitirá IF/ELSE pero no permitirá encadenamiento de declaraciones juntas; por ejemplo, A>0 Y B>0.

0 votos

Tienes razón, pero tal vez puedas lograr lo que estás buscando con alguna declaración lógica. Tal vez esta respuesta te pueda ayudar: gis.stackexchange.com/questions/48752/…

4voto

reddead Puntos 43

Puedes usar la calculadora de ráster de QGIS para esto, utilizando máscaras booleanas. Un ejemplo:

(("grid1@1">0) AND ("grid2@1">0)) * 1
+ (("grid1@1"=0) AND ("grid2@1">0)) * 2
+ (("grid1@1">0) AND ("grid2@1"=0)) * 3
+ (("grid1@1"=0) AND ("grid2@1"=0)) * 4

donde puedes cambiar 1, 2, 3 y 4 a los valores que desees.

La forma en que funciona esto es que la primera parte de cada término es una máscara booleana. ("grid1@1">0) AND ("grid2@1">0)) es Verdadero cuando se cumple tu primera condición, y puede ser multiplicado por tu valor categórico D (yo usé 1). Los siguientes tres términos coinciden con tus siguientes tres condiciones.

Nota

Steven Kay señala en los comentarios que la misma expresión se puede realizar sin usar AND reemplazándolo con un *. En este caso, el primer término se vería así

(("grid1@1">0) * ("grid2@1">0)) * 1

1 votos

Buena respuesta, ciertamente funciona en 2.16. Creo que algunas versiones antiguas no admiten AND, pero puedes reemplazarlo con *, ya que QGIS trata falso como 0 y verdadero como 1. OR es un poco más complicado, pero puedes usar + y verificar que la respuesta sea > 0.

0 votos

Versiones anteriores no admitían el operador AND, así que busqué en otro lugar ya que no podía hacer funcionar la sintaxis más compleja. Bueno saber que lo han añadido. Probaré esto en los datos. Gracias.

0 votos

Puedo confirmar que reemplazar AND con * devuelve resultados idénticos, al menos en QGIS 2.16.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X