Álgebra de mapas en Spatial Analyst

Disponible con una licencia de Spatial Analyst.

El á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. Vea el siguiente ejemplo:

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

La sentencia 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 sentencias simples, pero la potencia del lenguaje es evidente al crear sentencias 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.

A medida que crecen sus necesidades, puede explorar muchas de las facetas de álgebra de mapas. El siguiente recorrido rápido le brindará lo esencial para iniciar.

Conceptos básicos para ejecutar el álgebra de mapas

Existen tres maneras de utilizar el álgebra de mapas:

  • La herramienta Calculadora ráster
  • La ventana de Python
  • Un entorno de desarrollo integrado de Python (IDE)

Calculadora ráster

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

Interfaz de usuario de Calculadora ráster
Se muestra la interfaz de usuario de la 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 sentencias 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 permite utilizar herramientas de geoprocesamiento y la funcionalidad de Python desde ArcGIS Pro. La funcionalidad de Python que ejecuta desde esta ventana puede ir desde una línea única hasta bloques de código multilínea complejos. La ventana de Python también ofrece un lugar para acceder a funcionalidades adicionales utilizando módulos y bibliotecas de Python de terceros.

Para iniciar la ventana de Python, en la pestaña Análisis, haga clic en el menú desplegable de Python y, a continuación, seleccione el botón de la ventana de Python Mostrar ventana de Python. Como alternativa, en la pestaña Vista, en el grupo Ventanas, haga clic en la ventana de Python.

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 pulsa Intro al final de una sentencia, esta 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 de Python

Aunque no existe ningún límite para el número de sentencias que se pueden introducir en 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 sentencias 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")

# Run 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 proporciona 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.tif")

Se puede introducir la salida de una sentencia desde una sentencia subsiguiente.

outRas = Select("inras.tif", "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 Raster. 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 sentencia debe trabajar en rásteres (es decir, para utilizar el operador de Spatial Analyst), debe convertir el dataset como Raster. El siguiente ejemplo utiliza el operador de Spatial Analyst + para sumar dos rásteres:

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

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.tif") + 8

Crear expresiones complejas

Las herramientas y los operadores se pueden fusionar en una sentencia 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 sentencia, se agrega inras1 a inras2, y el resultado se divide por inras3. Sin los paréntesis, como en la segunda sentencia, 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 < c 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 permite tener acceso a los argumentos individuales de un parámetro para consultar, modificar y agregar argumentos. A continuación se muestra un ejemplo del uso de una clase:

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

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

A continuación se muestra un ejemplo de una clase de tabla de nueva representación cartográfica. 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 sentencia 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.

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"
contourInterval = 100
Contour(indem, "C:/output/outcontours", contourInterval)

Sugerencias para ejecutar las sentencias del álgebra de mapas

En todos los ejemplos del álgebra de mapas que se muestran a continuación, la salida es un objeto Raster. El objeto Raster 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 save se llama en el objeto Raster (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, Máscara y Alineación antes de implementar el operador o la herramienta de álgebra de mapas.

A continuación se muestra un ejemplo que demuestra el entorno del espacio de trabajo:

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 sentencia 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