Veja este link para mais detalhes.
O problema:
Quero fazer um loop através de uma varredura contínua (que não possui tabela de atributos), célula por célula, e obter o valor da célula. Eu quero pegar esses valores e executar condicionais neles, emulando as etapas de álgebra do mapa detalhadas abaixo sem usar a calculadora raster.
Por solicitação dos comentários abaixo, adicionei detalhes fornecendo informações básicas sobre o problema e justificando a necessidade de implementar um método como tal na seção abaixo chamada "A análise necessária:".
A análise proposta abaixo, apesar de ser relevante para o meu problema, fornecendo informações básicas, não precisa ser implementada em uma resposta. O escopo da pergunta refere-se apenas à iteração através de uma varredura contínua para obter / definir os valores da célula.
A análise necessária:
Se QUALQUER uma das seguintes condições for atendida, forneça um valor de 1 a célula de saída. Somente forneça um valor de 0 a célula de saída se nenhuma das condições for atendida.
Condição 1: se o valor da célula for maior que as células superior e inferior, forneça o valor 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Onde o arquivo do kernel se parece com isso:
3 3
0 1 0
0 0 0
0 1 0
Condição 2: se o valor da célula for maior que as células esquerda e direita, forneça o valor 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Onde o arquivo do kernel se parece com isso:
3 3
0 0 0
1 0 1
0 0 0
Condição 3: se o valor da célula for maior que o topleft e as células inferiores, forneça o valor 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Onde o arquivo do kernel se parece com isso:
3 3
1 0 0
0 0 0
0 0 1
Condição 4: se o valor da célula for maior que as células inferior esquerda e superior direita, forneça o valor 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Onde o arquivo do kernel se parece com isso:
3 3
0 0 1
0 0 0
1 0 0
Condição 5: se qualquer uma das células adjacentes tiver um valor igual à célula central, atribua à varredura de saída o valor 1 ( usando variedade focal com os dois cálculos de vizinhança mais próximos )
Por que não usar álgebra de mapa?
Foi observado abaixo que meu problema poderia ser resolvido usando álgebra de mapa, mas, como visto acima, esse é um total geral de seis cálculos de varredura, mais um para combinar todos os rasters criados juntos. Parece-me que é muito mais eficiente ir célula por célula e fazer todas as comparações de uma só vez em cada célula, em vez de repetir cada uma individualmente sete vezes e utilizar bastante memória para criar sete rasters.
Como o problema deve ser atacado?
O link acima aconselha o uso da interface IPixelBlock, mas na documentação da ESRI não está claro se você está realmente acessando um valor de célula única através do IPixelBlock ou se está acessando vários valores de célula do tamanho do IPixelBlock definido. Uma boa resposta deve sugerir um método para acessar os valores das células de uma varredura contínua e fornecer uma explicação da metodologia por trás do código, se não aparentemente óbvio.
Em suma:
Qual é o melhor método para percorrer todas as células em uma varredura CONTÍNUA (que não possui tabela de atributos ) para acessar seus valores de célula?
Uma boa resposta não precisa implementar as etapas de análise descritas acima, mas apenas fornecer uma metodologia para acessar os valores das células de uma varredura.