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.


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


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)"

Ó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.


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).


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.


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).


-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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.