Reclassificar raster usando GDAL?

8

Estou procurando uma ferramenta do GDAL capaz de reclassificar uma varredura que contém vários valores discretos. Até agora, encontrei rasladores Reclassify usando GDAL e Python ; no entanto, parece que apenas valores únicos podem ser manipulados aqui.

Existe algo como uma ferramenta nativa do conjunto?

Arne
fonte

Respostas:

8

gdal_calc pode ser usado para uma reclassificação de muitas classes.

Por exemplo, você pode alterar os valores abaixo (e iguais) de 12 a 10, os valores de 20, 30, 40, 50 permanecem os mesmos e os valores entre acima de 50 e 62 são alterados para 60:

  python gdal_calc.py -A input.tif --outfile=output.file --calc="10*(A<=12)+20*(A==20)+30*(A==30)+40*(A==40)+50*(A==50)+60*((A>50)*(A<=62))" --NoDataValue=0
Jot eN
fonte
Observe que a documentação do GDAL ( gdal.org/gdal_calc.html ) implica que o gdal_calc.py funcionará com várias rasters, pois você pode escolher qualquer letra maiúscula do alfabeto. Não consegui fazê-lo funcionar com mais de duas entradas por vez. Ele aceitou mais entradas sem gerar um erro, mas meus testes mostraram que apenas as duas primeiras foram usadas.
David A
7

gdal_reclassify é uma ferramenta não oficial do Python, baseada em ligações do Python GDAL, capaz de reclassificar de acordo com várias classes de valores.

Requisitos:

python
numpy
gdal binaries
python-gdal bindings

Exemplo:

python gdal_reclassify.py source_dataset.tif destination_dataset.tif -c "<30, <50, <80, ==130, <210" -r "1, 2, 3, 4, 5" -d 0 -n true -p "COMPRESS=LZW"
Antonio Falciano
fonte
3

Se você estiver trabalhando em um script python, use o .ReadAsArraymétodo Você pode reclassificar usando numpy.

import numpy as np
sample = np.random.randint(low = 0, high = 9, size =(5,5))
print(sample)
sample[sample == 4] = 40
sample[sample <= 2] = -20
print(sample)
RoperMaps
fonte
1
A desvantagem disso é que toda a varredura deve caber na memória. Com gdal_calc.py, a leitura da varredura em pedaços menores é tratada para você.
Iamlukesky 11/11/19