Vea este enlace para más detalles.
El problema:
Quiero recorrer un ráster continuo (uno que no tiene tabla de atributos), celda por celda, y obtener el valor de la celda. Quiero tomar esos valores y ejecutar condicionales sobre ellos, emulando los pasos de álgebra de mapas detallados a continuación sin usar la calculadora ráster.
Por solicitud de comentarios a continuación, he agregado detalles que brindan antecedentes sobre el problema y justifican la necesidad de implementar un método como tal en la sección a continuación llamada "El análisis necesario:".
El análisis propuesto a continuación, aunque es relevante para mi problema al proporcionar antecedentes, no necesita implementarse en una respuesta. El alcance de la pregunta solo se refiere a iterar a través de un ráster continuo para obtener / establecer los valores de las celdas.
El análisis necesitaba:
Si se cumple CUALQUIERA de las siguientes condiciones, asigne a la celda de salida un valor de 1. Solo asigne a la celda de salida un valor de 0 si ninguna de las condiciones se cumple.
Condición 1: si el valor de la celda es mayor que las celdas superior e inferior, proporcione el valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde el archivo kernel se ve así:
3 3
0 1 0
0 0 0
0 1 0
Condición 2: si el valor de la celda es mayor que las celdas izquierda y derecha, proporcione el valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde el archivo kernel se ve así:
3 3
0 0 0
1 0 1
0 0 0
Condición 3: si el valor de la celda es mayor que las celdas superior e inferior derecha, dé el valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde el archivo kernel se ve así:
3 3
1 0 0
0 0 0
0 0 1
Condición 4: si el valor de la celda es mayor que las celdas de abajo a la izquierda y hacia arriba, dé el valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde el archivo kernel se ve así:
3 3
0 0 1
0 0 0
1 0 0
Condición 5: si cualquiera de las celdas adyacentes tiene un valor IGUAL a la celda central, asigne al ráster de salida un valor de 1 ( utilizando variedad focal con dos cálculos de vecindad más cercanos )
¿Por qué no usar álgebra de mapas?
A continuación se ha señalado que mi problema podría resolverse utilizando el álgebra de mapas, pero como se ve arriba, se trata de un total de seis cálculos ráster, más uno para combinar todos los rásteres creados juntos. Me parece que es mucho más eficiente ir celda por celda y hacer todas las comparaciones a la vez en cada celda en lugar de recorrer cada una individualmente siete veces y utilizar un poco de memoria para crear siete rásteres.
¿Cómo se debe atacar el problema?
El enlace anterior aconseja utilizar la interfaz IPixelBlock, sin embargo, de la documentación de ESRI no está claro si realmente está accediendo a un solo valor de celda a través de IPixelBlock, o si está accediendo a múltiples valores de celda desde el tamaño del IPixelBlock que configuró. Una buena respuesta debería sugerir un método para acceder a los valores de celda de un ráster continuo y proporcionar una explicación de la metodología detrás del código, si no es aparentemente obvio.
En resumen:
¿Cuál es el mejor método para recorrer cada celda en un ráster CONTINUO (que no tiene una tabla de atributos ) para acceder a sus valores de celda?
Una buena respuesta no necesita implementar los pasos de análisis descritos anteriormente, solo necesita proporcionar una metodología para acceder a los valores de celda de un ráster.