Estou tentando agregar alguns dados rasterizados (todos .tif) até uma resolução mais grossa (de 0,05 a 0,25 graus) usando gdalwarp em python, mas o comando não está funcionando. Em vez de obter uma saída com uma ampla faixa de valores, todos os valores da saída são 0. A resolução e a profundidade / tipo de pixel estão corretos, mas os valores não.
Aqui está a documentação do comando gdalwarp: http://www.gdal.org/gdalwarp.html
Eu tenho dois arquivos de entrada que desejo agregar resolução de até 0,25 graus, produzindo várias saídas:
'NDVI_raster': A primeira entrada é uma varredura assinada de 16 bits representando o NDVI, com valores variando de -10.000 a 10.000 e valores nodata de -15.000.
'nodata_mask': o segundo é uma máscara NoData, flutuante de 32 bits, em que 1 = valores de dados "bons" e 0 = NoData.
Com o 'NDVI_raster' como entrada, quero produzir 7 saídas diferentes, cada uma representando uma estatística diferente. Eu faço isso chamando gdalwarp 7 vezes, sempre definindo o método de reamostragem (-r) para um dos seguintes: média, modo, max, min, mediana, q1, q2. Vou chamar as saídas NDVI_ave.tif, NDVI_mode.tif, etc. No momento, estou usando o GDAL 1.10.1, que apenas permite média e modo, por isso estou testando apenas essas duas estatísticas agora.
Usando 'nodata_mask' como entrada, quero produzir um QAL (camada de garantia de qualidade). Para fazer isso, eu uso gdalwarp, com o modo de reamostragem definido como 'médio' para agregar até 0,25 graus. Isso resulta em cada pixel representando a proporção de bons pixels / total de pixels da entrada. Vamos chamar a saída QAL.
Aqui está o que está no meu código (usando o modo como exemplo para a primeira entrada):
os.system('gdalwarp -tr .25 .25 -r mode -srcnodata -15000 %s %s' % (NDVI_raster, NDVI_mode))
E para a camada de controle de qualidade:
os.system('gdalwarp -tr .25 .25 -r average -srcnodata -15000 %s %s' % (nodata_mask, QAL))
Os resultados são rasters com a resolução, projeção e profundidade de pixel corretas, mas os valores de pixel são todos 0.
Alguém familiarizado com python / gdal sabe o que está acontecendo?
Ao chamar o comando gdalwarp na linha de comando (linux), obtenho o resultado desejado. Ao usar o os.system para chamar gdalwarp do python, recebo rasters vazios. Então, talvez algo esteja errado com minhas ligações gdal / python?
Em vez de chamar o comando via os.system, usei o subprocesso. A ferramenta por esse método também parece funcionar sem problemas, mas o resultado é o mesmo: uma varredura cheia de zeros.
Tentei colocar a chamada gdalwarp em um script shell bash e chamar esse script shell a partir de python, mas o resultado é um monte de -1s em vez de 0s. Estranhamente, eu já tinha testado antes e tenho certeza de que funcionou, mas o teste foi excluído do meu servidor e agora não posso recriá-lo por algum motivo.
Colocar o comando gdalwarp em um script do shell bash e depois chamá-lo na linha de comando me fornece o resultado desejado. Chamar o mesmo script de shell do python, no entanto, não. Parece que algo está errado com o python, mas o que e como corrigi-lo?
os.system
realmente inicia um shell e executa o comando fornecido. Além do valor de retorno, você provavelmente deve verificar as variáveis que você está tentando passar (ou seja, todas as questões citando etc.?)
os.system
para subprocess
o módulo mais recente e conter várias melhorias (de segurança).
-ot Float32
ou algo semelhante para a máscara de qualidade, porque não pode representar frações com uma varredura inteira.