Consulte este enlace para obtener más detalles.
El Problema:
Quiero un bucle a través de un continuo de trama (uno que no tiene tabla de atributos), celda por celda, y obtener el valor de la celda. Quiero tomar esos valores y ejecutar las oraciones condicionales en ellos, emulando el mapa de álgebra pasos que se detallan a continuación sin que en realidad el uso de la calculadora ráster.
Por petición de comentarios de abajo, he añadido detalles proporcionar antecedentes del problema y justificación de la necesidad de implementar un método como tal en la sección denominada "El análisis necesario:".
El análisis que se propone a continuación, siendo relevante para mi problema por proporcionar el fondo,no necesita ser implementado en una respuesta. El alcance de la pregunta, se refiere a la iteración de un continuo de trama para obtener o establecer los valores de celda.
El análisis necesario:
Si ALGUNA de las siguientes condiciones se cumplen, dar celda de salida a un valor de 1. Sólo dar celda de salida a un valor de 0 si ninguna de las condiciones se cumplen.
Condición 1: Si el valor de la celda es mayor que la parte superior e inferior de las células, dar valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde archivo del kernel se parece a esto:
3 3
0 1 0
0 0 0
0 1 0
Condición 2: Si el valor de la celda es mayor que la de la izquierda y la derecha de las células, dar valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde archivo del kernel se parece a esto:
3 3
0 0 0
1 0 1
0 0 0
Condición 3: Si el valor de la celda es mayor que topleft y bottomright células, dar valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde archivo del kernel se parece a esto:
3 3
1 0 0
0 0 0
0 0 1
Condición 4: Si el valor de la celda es mayor que bottomleft y topright células, dar valor de 1:
Con("raster" > FocalStatistics("raster", NbrIrregular("C:\filepath\kernel_file.txt"), "MAXIMUM"), 1, 0)
Donde archivo del kernel se parece a esto:
3 3
0 0 1
0 0 0
1 0 0
Condición 5: Si cualquier una de las células adyacentes que tiene un valor IGUAL a el centro de la célula, dar el ráster de salida un valor de 1 (uso de focales variedad con dos más cercano barrio de los cálculos)
¿Por qué no utilizar el mapa de álgebra?
Se ha señalado por debajo de la que mi problema puede ser resuelto mediante la asignación de álgebra, pero como se ha visto anteriormente este es un gran total de seis trama cálculos, más de uno de combinar todos los rásteres creado juntos. A mí me parece que es mucho más eficiente para ir celda por celda y hacer todas las comparaciones a la vez en cada celda en lugar de un bucle a través de cada uno de forma individual siete veces y utilizando un poco de memoria para crear siete rásteres.
¿Cómo debe el problema de ser atacado?
El enlace de arriba aconseja el uso de IPixelBlock interfaz, sin embargo no está claro a partir de ESRI documentación que usted tenga acceso a un único valor de la celda en sí a través de IPixelBlock, o si tiene acceso a varios valores de celda del tamaño de la IPixelBlock establecido. Una buena respuesta debe sugerir un método para acceder a los valores de celda de un continuo de trama y de proporcionar una explicación de la metodología detrás de el código, si no lo aparentemente obvio.
En resumen:
¿Cuál es el mejor método de bucle a través de cada célula en un CONTINUO de trama (el cual tiene ningún atributo de la tabla) para acceder a sus valores de celda?
Una buena respuesta, no necesita implementar el análisis de los pasos descritos anteriormente, se necesita sólo para proporcionar una metodología para acceder a los valores de las celdas de una trama.