17.10. A calculadora raster. Sem valores de dado
Nota
Nesta lição veremos como usar a calculadora raster para executar algumas operações em camadas raster. Nós também iremos explicar o que é ‘sem valores de dados’ e como a calculadora e outros algoritmos de lidam com eles.
A calculadora raster é um dos algoritmos mais poderosos que você vai encontrar. É um algoritmo muito flexível e versátil que pode ser usado para muitos cálculos diferentes e que em breve se tornará uma parte importante de sua caixa de ferramentas.
Nesta lição, realizaremos alguns cálculos com a calculadora raster, a maioria deles bastante simples. Isso vai deixar-nos ver como ela é usada e como ela lida com algumas situações particulares que poderia-se encontrar. Entender isso é importante para mais tarde obter os resultados esperados quando utilizar a calculadora e também para compreender certas técnicas que são comumente aplicadas com ela.
Abra o projeto QGIS correspondente a esta lição e você vai ver que ele contém várias camadas raster.
Abra
.Nota
A interface é diferente em versões recentes.
A janela contém vários parâmetros.
Bandas Raster: com um duplo clique, você seleciona uma camada para ser usada na calculadora.
Operadores: os operadores que podem ser usados nas operações.
Aviso
A calculadora diferencia minúsculas de maiúsculas.
Para começar, vamos mudar as unidades do ‘dem25’ de metros para pés. A fórmula que precisaremos é a seguinte:
h' = h * 3.28084
Selecione a camada dem25, em Bandas Raster, com um duplo clique e digite, em seguida, `` * 3.28084`` no campo de expressão raster.
Aviso
Use sempre “.” e não “,” para a casa decimal.
Dê um nome para a camada de saída e clique OK para executar o algoritmo. Você vai ter uma camada que tem a mesma aparência da camada de entrada, mas com valores diferentes. A camada de entrada que usamos tem valores válidos em todas as suas células, de modo que o último parâmetro não tem nenhum efeito.
Vamos agora realizar um outro cálculo, desta vez sobre a camada accflow. Essa camada contém valores de fluxo acumulado, um parâmetro hidrológico. Ela contém esses valores apenas dentro da área de uma dada bacia, sem valores fora da mesma. Como você pode ver, a renderização não é muito informativa, devido à forma como os valores estão distribuídos. Usando o logaritmo dessa acumulação de fluxo irá produzir uma representação muito mais informativa. Podemos calcular isso com o uso da calculadora raster.
Abra a janela novamente, selecione a camada accflow na banda raster e insira a seguinte fórmula: sqtr(sqtr("accflow@1"))
.
Você deverá ter uma camada resultante parecida com essa:
Se você selecionar a ferramenta Identificar feições para saber o valor de uma camada em um determinado ponto, selecionar a camada que acabou de criar e clicar em um ponto fora da bacia, você verá que ele não tem valor.
Para o próximo exercício vamos usar duas camadas, em vez de uma, e iremos obter um MDE com valores de elevação válidos apenas dentro da bacia definida na segunda camada. Abra a calculadora raster e insira a seguinte fórmula no campo de expressão: "accflow@1" / "accflow@1" * "dem25@1"
. Ou para versões anteriores:
a/a * b
a
, ou accflow
, refere-se à camada de fluxo acumulado e b
, ou dem25
, refere-se ao MDE. O que estamos fazendo na primeira parte da fórmula é dividindo a camada de fluxo acumulada por ela mesma, o que irá resultar em um valor de 1 no interior da bacia, e nenhum valor fora da mesma. Depois multiplicamos pelo MDE, para obter o valor de elevação das células no interior da bacia (MDE * 1 = MDE
) e o sem-valor para os dados fora dela (MDE * sem_valor = sem_valor
)
Eis a camada resultante:
Esta técnica é utilizada com frequência para mascarar valores em uma camada raster e é útil sempre que você quiser executar cálculos para uma região diferente da retangular arbitrária que é usada pela camada raster. Por exemplo, um histograma de elevação de uma camada raster não tem muito significado. Se em vez disso o mesmo é calculado utilizando apenas os valores correspondentes a uma bacia (como no caso acima), o resultado que se obtém é significativo e realmente dá informações sobre a configuração da bacia.
Existem outras coisas interessantes sobre esse algoritmo que acabamos de executar, além dos dados sem valor e de como eles são tratados. Se você der uma olhada nas extensões das camadas que multiplicamos (você pode fazê-lo dando um duplo clique em seus nomes na tabela de conteúdo e olhando para as suas propriedades), você vai ver que não são iguais, dado que a extensão coberta pela camada de acumulação de fluxo é menor do que a extensão total do MDE.
Isso significa que aquelas camadas não se encaixam e que não podem ser multiplicadas diretamente sem homogeneizar os tamanhos e extensões por meio do redimensionamento de uma ou de ambas as camadas. No entanto, não fizemos nada. O QGIS cuida dessa situação e automaticamente redimensiona as camadas de entrada, quando necessário. A extensão de saída é a menor extensão de cobertura, calculada a partir das camadas de entrada, e o tamanho de célula o menor dos tamanhos de célula.
Neste caso (e na maioria dos casos), isto produz os resultados desejados, mas você deve sempre estar ciente das operações adicionais que estão ocorrendo, uma vez que elas podem afetar o resultado. Nos casos em que esse comportamento pode não ser o desejado, o redimensionamento manual deve ser aplicado com antecedência. Nos próximos capítulos, veremos mais sobre o comportamento dos algoritmos ao usar várias camadas raster.
Vamos terminar esta lição com outro exercício de mascaramento. Vamos calcular a inclinação em todas as áreas com uma altitude entre 1000 e 1500 metros.
Neste caso, não temos uma camada para usar como máscara, mas podemos criá-la usando a calculadora.
Execute a calculadora utilizando o MDE como única camada de entrada e a seguinte fórmula:
ifelse(abs(a-1250) < 250, 1, 0/0)
Como você pode ver, nós podemos usar a calculadora não só para fazer operações algébricas simples, mas também para executar cálculos mais complexos que envolvam sentenças condicionais, como a descrita acima.
O resultado tem um valor de 1 dentro da faixa com a qual queremos trabalhar e sem valor em células fora dela.
O “sem valor” vem da expressão 0/0. Uma vez que é um valor indeterminado, irá somar um valor NaN (não é um número), o qual é realmente tratado como um “sem valor”. Com este pequeno truque você pode definir um “sem valor” sem a necessidade de saber qual é o “sem valor” da célula de dados.
Agora você só tem que multiplicá-lo pela camada de inclinação incluída no projeto e você vai obter o resultado desejado.
Tudo isso pode ser feito numa única operação, com a calculadora. Nós deixamos isso como um exercício para o leitor.