Como definir todos os pixels com valor <= 0 para "nodata" na varredura DEM?

28

Eu tenho uma varredura DEM com valores de pixel entre cerca de 3000 e -0.0003. Preciso definir todos os pixels com o valor 0 e menor (<= 0) como "nodata" (para cálculos de varredura posteriores e para reduzir o tamanho do arquivo).

Parece-me que esta é uma tarefa para a calculadora raster (definir valor de pixels <= 0 para "nodata") ou uma reclassificação (definir valor de pixels <= 0 para "nodata" e manter todos os outros valores), mas eu não saber como.

MAPA
fonte
Também preciso definir todos os pixels com um valor <0 para "nodata". Então o post do vascobnunes não está me ajudando.
MAP
Desculpe, mas não está me ajudando a mudar o estilo de exibição da varredura. Eu preciso editar fisicamente meu arquivo raster.
MAP
A partir dos comentários e sugestões de encerramento, parece que você deve editar sua pergunta para esclarecer com precisão o que deseja e o que já tentou.
PolyGeo

Respostas:

29

Não encontrei uma solução de uma ferramenta, mas você pode primeiro usar a calculadora raster para zerar todos os valores abaixo de um determinado limite e, em seguida, usar gdal_translate com -a_nodata 0 para transformar 0 em nodata.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

underdark
fonte
17

Aqui estão as expressões mapcalc do GRASS para definir um intervalo como NULL:

r.mapcalc "dem_corrected = if(dem<=0, null(), dem)"
Micha
fonte
Ótimo, funciona para mim!
ilFonta 27/01
16

Isso pode ser feito em uma etapa do QGIS na calculadora raster.

No QGIS3, para uma camada raster denominada "x", use a seguinte expressão:

(("x">0)*"x") / (("x">0)*1 + ("x"<=0)*0)

Esse truque mapeia os valores de varredura x> 0 na proporção x / 1 = x, e os valores de varredura x <= 0 na proporção 0/0 = NaN. Esse NaN é renderizado como FLOAT_MIN (também conhecido como -3.402832 ... e + 38) se a varredura for flutuante de 4 bytes.

Estranhamente, essa pergunta parece ter sido feita há algum tempo, com (até onde minha pesquisa rápida no Google mostra hoje) a maioria dos entrevistados dizendo que não pode ser feita em uma única etapa. Certamente não deveria ser invadido dessa maneira. A documentação do QGIS também poderia ser melhor.

Colin Stark
fonte
10

Muito obrigado a Dominik. Minha primeira resposta não está correta para o QGIS 2.8.3 (a expressão "myraster@1" > 0retorna 0 ou 1 para entrada não nodata , para entrada nodata ela retorna nodata ).

A seguinte expressão da Calculadora de varredura QGIS deve ser suficiente (camada raster denominada "myraster"), pois a Calculadora de varredura QGIS define todos os pixels que não satisfazem a condição como nodata :

("myraster @ 1"> 0) * "myraster @ 1"

A solução a seguir é baseada em https://docs.qgis.org/2.8/en/docs/training_manual/processing/no_data.html e funciona no QGIS 2.8.3 com SAGA 2.1.2.

No processamento QGIS, use a calculadora SAGA Raster e digite o seguinte na fórmula :

ifelse(g1=0, 0/0, ifelse(g1<0, 0/0, g1))

ou

ifelse(a=0, 0/0, ifelse(a<0, 0/0, a))

Isso transformará todos os valores menores ou iguais a 0 em nodata (0/0).

Håvard Tveite
fonte
isso não funciona porque os pixels que não satisfazem a condição são 0, não NODATA
Dominik
Super. Pode usá-lo para o filtro de valor raster: Por exemplo, filtro (0,5; 23]: ifelse (g1 <0,5, 0/0, ifelse (g1> 23, 0/0, g1))
lolipop
10

Você também pode salvar a camada (clique com o botão direito, salvar como ...) e especificar um intervalo de nodata. Isso manterá os nodatas originais e criará novos nodatas para o intervalo de valores especificado.

Joost Beckers
fonte
Esta é a melhor solução
Alexander
5

Eu tive um problema semelhante, mas tinha os dois valores que desejava converter para dados sem dados E valores sem dados existentes na varredura.

Identificar resultados

Vim a esta página para obter ajuda, mas acho que há uma ressalva nas abordagens aqui. Os métodos do @underdark e do @Micha parecem funcionar apenas onde não há valores sem dados existentes na varredura.

Para contornar isso, você precisa converter os valores sem dados e os valores que deseja converter em sem dados, em um número consistente. Não há problema em usar o segundo passo do @underdark.

Para fazer isso, use a Caixa de ferramentas de processamento> Reclassificar valores de grade (SAGA) para converter os valores e os valores sem dados em um número comum (por exemplo, -999), ao mesmo tempo. Especificamente, use o método "range" e especifique o intervalo. Em seguida, em substituir valores sem dados, escolha esse mesmo valor (por exemplo, -999). Desmarque substituir outros valores. Isso funciona para uma única alteração de valor ou alterações mais complexas também.

Em seguida, siga o método @underdark e salve a varredura usando Raster> Conversão> Traduzir e marque sem dados, digitando o valor que você usou (por exemplo, -999).

Sarracenia
fonte
-3

Clique com o botão direito do mouse na varredura, vá para propriedades da varredura, selecione a terceira opção "transparência", na guia sem valor de dados, adicione valor adicional 0 e clique em Aplicar. Esta é a opção semelhante "exibir valor de plano de fundo" no arcgis.

Bharadwaj AK
fonte
4
Não é um bom método. Você não está realmente mudando os dados por isso, se você precisa estatísticas calcular ou fazer uma análise dos resultados será incorreto
khafen