Considere o conjunto de dados NLCD2001 Land Cover para o Alasca ( link para download ). Preciso reclassificar esse conjunto de dados para que apenas os pixels dos valores 41, 42 e 43 sejam preservados; todos os outros valores de pixel devem se tornar NoData (ou 0, se necessário).
Parece uma tarefa simples, exigindo apenas uma chamada para a ferramenta Reclassificar. Infelizmente, todas as chamadas resultam em uma mensagem de erro vaga e inútil:
Executing: Reclassify "D:\ak_nlcd_2001_land_cover_3-13-08_se5.img" Value "0 40 0;41 41;42 42;43 43;44 255 0;NODATA 0" "D:\alaska_reclassified.tif" DATA
Start Time: Thu Jan 03 09:23:13 2013
ERROR 999998: Unexpected Error.
Failed to execute (Reclassify).
Failed at Thu Jan 03 09:23:13 2013 (Elapsed Time: 0.00 seconds)
Como posso reclassificar esse conjunto de dados raster? Estou usando o ArcCatalog 10.0, Build 4000, com a extensão Spatial Analyst ativada.
reclassify
deve ser um último recurso, porque é de escopo tão geral que provavelmente usa métodos menos eficientes do que os que podem ser obtidos quando a reclassificação é fácil de expressar aritmeticamente ou logicamente. No presente caso, o critério para a reclassificação é tão simples que você deve experimentá-lo primeiro Con
ou mesmo com operações aritméticas diretas (porque são rápidas). Por exemplo, "grid" * ("grid" >= 41) * ("grid" <= 43)
deveria fazê-lo. A RAM não deve ser um problema - o Spatial Analyst abre automaticamente sua E / S raster e essas são operações locais.
Inlist
é uma boa solução (+1). Consegui usar con
e monitorar o uso da RAM durante a operação. Nunca excedeu 180 MB, pouco mais que a RAM usada apenas para iniciar o ArcMap. O mosaico no ArcGIS é automático - você nem consegue controlá-lo (a menos que esteja programando na interface C / Fortran). Parece que as limitações de RAM são de pouca preocupação.
con
trabalhou para mim também, com a condição "Value" >= 41 AND "Value" <= 43
. Eu teria optado por essa solução, mas não tenho certeza se valores adicionais de varredura serão de interesse no futuro. Obviamente, eu poderia adicionar uma OR
cláusula where, mas ela se tornaria mais complicada. InList
parece a solução mais direta em relação à legibilidade e manutenção.