Un recorrido rápido por el uso de Álgebra de mapas en Spatial Analyst

Disponible con una licencia de Spatial Analyst.

Álgebra de mapas le permite tener acceso a herramientas, operadores, funciones y clases de Spatial Analyst a través del álgebra. En su forma más básica, se especifica un ráster de salida a la izquierda de un signo igual (=) y las herramientas, operadores y sus parámetros a la derecha. Por ejemplo:

from arcpy.sa import *
outShade = Hillshade("inelevation", 99, 33)

La declaración anterior calcula el sombreado, determinando la iluminación con el sol en un acimut de 99 grados y una altitud de 33 grados, y crea un objeto Raster denominado outShade para almacenar los resultados.

El Álgebra de mapas puede ejecutar declaraciones simples, pero la potencia del lenguaje es evidente al crear declaraciones y modelos complejos. Como el Álgebra de mapas se ha integrado en Python, todas las funcionalidades de Python y ArcPy y sus extensiones (módulos, clases, funciones y propiedades) están disponibles para usted, el modelador.

Es fácil convertirse rápidamente productivo con el Álgebra de mapas y según aumenten sus necesidades, pueden explorar varias de sus facetas. El siguiente recorrido rápido le brindará lo esencial para iniciar.

Lo básico de la ejecución del Álgebra de mapas

Existen tres maneras de utilizar el Álgebra de mapas:

  • La herramienta Calculadora ráster
  • La ventana de Python
  • Su entorno de desarrollo integrado Python (IDE, por sus siglas en inglés) favorito

Calculadora ráster

La herramienta Calculadora ráster ejecuta las expresiones del Álgebra de mapas. La herramienta tiene una interfaz de calculadora fácil de utilizar desde la cual se crean la mayoría de declaraciones del Álgebra de mapas simplemente al hacer clic en los botones. La Calculadora ráster se puede utilizar como una herramienta independiente, pero también en ModelBuilder. Como resultado, la herramienta permite integrar la potencia del Álgebra de mapas en el ModelBuilder.

Interfaz de usuario de Calculadora ráster
Interfaz de usuario de Calculadora ráster

En la expresión anterior, se combinan tres rásteres multiplicando el segundo y el tercero y sumando ese resultado al primero. Tenga en cuenta que los operadores siguen un orden de prioridad definido.

La herramienta Calculadora ráster no se ha diseñado para reemplazar a otras herramientas de Spatial Analyst. Continúe utilizando las otras herramientas para realizar los cálculos correctos. Por ejemplo, utilice la herramienta Pendiente para realizar los cálculos de pendientes. La herramienta Calculadora ráster está diseñada para ejecutar declaraciones algebraicas de línea simple.

Como la Calculadora ráster es una herramienta de geoprocesamiento, se puede integrar en ModelBuilder. Consulte los siguientes temas para obtener más información:

Ventana de Python

La ventana de Python es una ubicación eficiente y conveniente para utilizar las herramientas de geoprocesamiento y funcionalidad de Python dentro de ArcGIS. Los comandos de Python que se ejecutan desde esta ventana pueden variar desde líneas de códigos simples a bloques complejos con lógica. La ventana de Python también proporciona un lugar para acceder a funcionalidades adicionales por medio de módulos y bibliotecas de Python personalizadas o de terceros.

Para iniciar la ventana de Python, haga clic en el botón Python Mostrar ventana de Python en la pestaña Análisis, o bien desde el grupo Windows de la pestaña Vista.

Ejemplo de la ventana de Python

En la secuencia de declaraciones anterior, se importan el paquete del sitio ArcPy, los entornos de geoprocesamiento y los módulos de Spatial Analyst; se define el espacio de trabajo; se ejecuta la herramienta Pendiente; y se guarda permanentemente la salida. Una vez que se introduce un retorno de carro al final de una declaración, ésta se ejecuta inmediatamente.

Algunas entidades de la Ventana de Python incluyen la finalización automática de una línea incorporada, el uso de variables y el acceso a la funcionalidad de Python y ArcPy.

Entorno de desarrollo integrado Python

Aunque no existe ningún límite para el número de declaraciones que se pueden introducir dentro de la ventana de Python, puede ser engorroso crear modelos más complejos. También puede tener acceso a las herramientas, los operadores, las funciones y las clases de los módulos de Spatial Analyst desde su entorno de desarrollo integrado favorito. Inicie su IDE preferido e introduzca las declaraciones deseadas.

En el script siguiente, se importan ArcPy, los entornos de geoprocesamiento y el módulo de Spatial Analyst; se definen las variables; se verifica la extensión; se ejecuta la herramienta Pendiente; y se guarda la salida.

# Name: Slope
# Description: Identifies the rate of maximum change
#               in z-value from each cell.
# Requirements: Spatial Analyst Extension


# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inRaster = "elevation"
outMeasurement = "DEGREE"
zFactor = 0.3043

# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")

# Execute Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)

# Save the output
outSlope.save("C:/output/outslope02")

Como en el caso con la ventana de Python, un IDE proporcionará el acceso a todas las funcionalidades de Python y ArcPy disponibles.

Trabajar con herramientas

Todas las herramientas de Spatial Analyst que generan un ráster están disponibles en formato algebraico. El nombre del dataset se puede utilizar si se encuentra en la ventana Contenido o en el espacio de trabajo actual; de lo contrario, se debe introducir la ruta completa.

# In the following statement, indem is either  
#   in the TOC or in the current workspace
outRas = Aspect("indem")

# In the following statement the full path is specified
outRas2 = Aspect("C:/Data/indem2")

Se puede introducir la salida de una declaración desde una declaración subsiguiente.

outRas = Select("inras", "Value > 105")

# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)

Trabajar con operadores

El Álgebra de mapas admite una serie de operadores (por ejemplo, +, - y *). Los mismos operadores existen en Python, pero se modifican en el Álgebra de mapas para controlar de manera diferente los objetos Ráster. Por ejemplo, los siguientes agregan dos números juntos en una variable:

# set outVar to 14 using the Python + operator
outVar = 5 + 9

Para indicar que la declaración debe trabajar en rásteres (es decir, para utilizar el operador de Spatial Analyst), debe convertir el dataset como Ráster. El siguiente ejemplo utiliza el operador de Spatial Analyst + para sumar dos rásteres:

outRas = Raster("inras1") + Raster("inras2")

Los operadores pueden aceptar una mezcla de rásteres y números. Por ejemplo, lo siguiente agrega un valor constante de 8 a todas las celdas en el ráster de entrada:

outRas = Raster("inras1") + 8

Crear expresiones complejas

Las herramientas y los operadores se pueden fusionar en una declaración simple. El siguiente ejemplo ejecuta varias herramientas y operadores en cada expresión:

outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))

Puede utilizar paréntesis para controlar el orden de procesamiento. Considere los siguientes dos ejemplos, que utilizan los mismos operadores, pero con diferentes resultados debido al uso de paréntesis:

outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")

y

outRas2 = Raster("inras1") + Raster("inras2") / Raster("inras3")

En la primera declaración, se agrega inras1 a inras2 y el resultado se divide por inras3. Sin los paréntesis, como en la segunda declaración, inras2 debería dividirse por inras3 y el resultado debería agregarse a inras1.

Cuando se utilizan varios operadores booleanos (~, &, ^, |) o relacionales (<, <=, >, >=, ==, !=) consecutivamente en una única expresión, se deben usar paréntesis. Por ejemplo, los paréntesis son necesarios en la expresión: (a>2) & (a<5). Si no se utilizan los paréntesis, la expresión dará como resultado un error: a>2 & a<5. La siguiente expresión se ejecutará debido a que se utilizan los paréntesis:

outRas = (Raster("a") > 2) & (Raster("a") < 5)
Explorar:

Algunas expresiones simplemente no requieren de paréntesis, pero en lugar de ello deben volverse a escribir. Por ejemplo, una expresión con la forma a < b no se ejecutará y si se agregan paréntesis se cambiará su significado. Por consiguiente, para ejecutarla correctamente, esta expresión se debe reescribir como (a < b) & (b < c).

Usar las clases

Clases que se utilizan en las herramientas del Álgebra de mapas para los parámetros que tienen varios argumentos. El uso de clases para los parámetros de entrada le permiten el tener acceso fácilmente a los argumentos individuales de un parámetro para consultar, modificar y agregar argumentos adicionales. El siguiente ejemplo muestra el uso de una clase:

outRas = FocalStatistics("inRaster", NbrCircle(5, "CELL"), "SUM")

En la declaración anterior, la suma se calcula para cada celda dentro de cinco celdas circulares vecinas. NbrCircle es una clase que crea un objeto NbrCircle.

Un ejemplo de una tabla de nueva representación cartográfica clase siguiente. Cualquier número de valores se pueden escribir en una clase de nueva representación cartográfica.

outReclass = Reclassify("inRaster", "VALUE", RemapRange([[0, 1], [3, 10], [4, 8]]))

En la declaración anterior, se utiliza una clase, RemapRange, para definir la reclasificación de los valores de entrada. A las celdas con valor 0 en inRaster se les asignará 1 en outReclass y 3 se le asignará a las de 10 y 4 a las de 8.

Para obtener información adicional sobre el uso de las clases en Álgebra de mapas, consulte Descripción general de las clases de ArcGIS Spatial Analyst extension.

Funciones del Álgebra de mapas que dará como resultado entidades, tablas o archivos

Solo las herramientas de Spatial Analyst que generan como salida un ráster se implementan utilizando el formato algebraico. Para las herramientas de Spatial Analyst que generan salidas que no son un ráster (por ejemplo, entidades, tablas o archivos de texto), la salida se especifica como un parámetro dentro de la herramienta en los paréntesis. Tenga en cuenta la sintaxis en el siguiente ejemplo, que crea curvas como un dataset de entidades de polilínea de salida:

indem = "C:/Data/indem"
Contour(indem, "C:/output/outcontours")

Sugerencias para ejecutar las declaraciones del Álgebra de mapas

En todos los ejemplos del Álgebra de mapas que se muestran a continuación, la salida es un objeto Ráster. El objeto Ráster señala a un dataset ráster temporal que a menos que se guarde explícitamente se eliminará cuando finalice la sesión de ArcGIS. Para guardar permanentemente el dataset temporal, el método guardar se llama en el objeto Ráster (consulte los dos siguientes ejemplos).

Es recomendable que establezca entornos de análisis apropiados, en particular Espacio de trabajo actual, Extensión, Tamaño de celda, Método de proyección de tamaño de celda y Máscara, antes de implementar el operador o la herramienta Álgebra de mapas.

Un ejemplo que demuestra el entorno del espacio de trabajo es:

import arcpy 
from arcpy import env 
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 

outHillshade = Hillshade("elevation", 180, 75, "SHADOWS", 1)

outHillshade.save("outhillshd01")

En la declaración anterior, se establece el espacio de trabajo; por lo tanto, outhillshd01 se guardará en C:/sapyexamples/data.

Se recomienda establecer clases para cualquier entrada compleja a una herramienta del Álgebra de mapas para una variable y utilizar la variable en la declaración. En la declaración a continuación, un objeto de la clase RemapRange se establece para una variable, myRemapRange y se utiliza como entrada para la herramienta Reclasificar.

import arcpy 
from arcpy import env
from arcpy.sa import *

env.workspace = "C:/sapyexamples/data" 
myRemapRange = RemapRange([[-3, 0, 0], [0, 1.75, 25], [1.75, 3.5, 50], 
                           [3.5, 5.25, 75], [5.25, 7, 100]]) 

outReclassRR = Reclassify("inreclass", "VALUE", myRemapRange)

outReclassRR.save("rclassremran")

Lectura recomendada

Para obtener un conocimiento más profundo de ArcPy, explore estos temas:

Para obtener más información sobre geoprocesamiento en Python, lo siguiente le puede ser de utilidad:

Temas relacionados