Crear declaraciones complejas
Uno de los aspectos más ventajosos del Álgebra de mapas es la capacidad de crear una declaración que comprenda múltiples operadores y herramientas en una única declaración. La capacidad de introducir múltiples operadores y herramientas en una única declaración le permite modelar interacciones complejas más fácilmente y puede reducir el tiempo total de procesamiento. Las expresiones complejas no se limitan a la funcionalidad proporcionada por las herramientas de la Extensión ArcGIS Spatial Analyst; pueden incluir herramientas de cualquier otra caja de herramientas. Cuando se creen declaraciones complejas, hay reglas de interacción específicas que pueden ser necesarias para una correcta ejecución.
Reglas de declaraciones complejas
- En las declaraciones complejas, solo la salida a la izquierda del signo igual se convierte en un Objeto ráster.
- El orden de ejecución de una expresión está determinado por el paréntesis y el nivel de jerarquía de los operadores utilizados. Para obtener más información sobre la jerarquía del operador, consulte la Tabla jerarquía del operador.
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
En la declaración más arriba, inras2 está dividido por inras3 y el resultado se suma a inras1.
Nota:Es importante saber el nivel de jerarquía de los operadores. Por ejemplo, los operadores booleanos (~, &, ^,|) tienen un nivel de jerarquía mayor que los operadores relacionales (<, <=, >, >=, ==, !=), lo que afecta la manera en que crea sus expresiones. Para obtener más información sobre la jerarquía del operador, consulte la Tabla jerarquía del operador.
- Puede utilizar paréntesis para controlar el orden de ejecución. Los paréntesis pueden estar anidados, en tal caso la expresión dentro del paréntesis más interno se procesará primero, independientemente del valor de jerarquía de los operadores.
outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))
En la declaración indicada más arriba, inras2 está dividido por la suma de inras3 e inras1.
- Cuando se utilizan varios operadores booleanos (~, &, ^,|) y/o relacionales (<, <=, >, >=, ==, !=) consecutivamente en una única expresión deben de usarse paréntesis. Por ejemplo, se requieren paréntesis en la siguiente expresión (a>2) & (a<5).
outRas = (Raster("a") > 2 ) & ( Raster("a") < 5)
Inmersión:Puede que algunas expresiones no requieran paréntesis, aunque quizás haya que reescribirlas. Por ejemplo, una expresión de la forma a < b < c no se ejecutará y si se agregan paréntesis se cambiará el significado de la expresión. Por consiguiente para ejecutarla correctamente, esta expresión ha de ser reescrita en la forma (a < b) & (b < c).
- Los operadores, variables, números y herramientas se puede utilizar en declaraciones complejas.
outRas = Sin("inras1") + Raster("inras2") + 8
const = 10 outRas = Raster("inras1") + 2 * const
- Todas las reglas que se aplican a los paréntesis para declaraciones creadas con operadores también se aplican para aquellas declaraciones creadas con herramientas y operadores. La herramienta o el operador que se encuentre dentro del paréntesis anidado más profundo serán procesados primero.
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8
En la declaración de arriba, la suma de inras2 e inras3 se utiliza como entrada de la herramienta Estadísticas zonales. El valor de num se resta antes de dividirlo.
- En una serie de declaraciones, la salida de una declaración anterior se puede utilizar como entrada en una declaración posterior.
outAdd = Raster("inras1") + Raster("inras2") outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")
En el ejemplo que aparece más arriba, outAdd es un objeto ráster creado por la suma de inras1 e inras2. Puesto que outAdd es una variable, no se necesitan comillas cuando se utiliza como entrada de la herramienta Estadísticas focales posterior.
- Cualquier herramienta se puede integrar en otra herramienta, tenga como resultado un ráster o una clase de entidad. La salida requerida de la herramienta integrada se utiliza como la entrada de la herramienta exterior.
outdistance = EucDistance(ContourList("elevation", "#", [1500]))
dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
Nota:Dado que la herramienta integrada crea una salida que es solo una fase intermedia en un flujo de trabajo más extenso, el argumento de salida se puede sustituir por el símbolo de almohadilla "#", que permite que la herramienta cree una ruta y un nombre únicos para esta salida temporal. El uso del símbolo de almohadilla se analiza con más detalle en la sección Salida de la herramienta del tema de la ayuda Utilizar herramientas en Python.
- Para utilizar una salida opcional desde una herramienta en una expresión, se debe utilizar el nombre de dataset o la variable que represente el dataset que debe utilizarse. En el ejemplo indicado arriba, el ráster de vínculo de menor coste de salida es la salida en el espacio de trabajo con el nombre "out_bklink".
costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")
En el ejemplo indicado anteriormente, el ráster de menor coste se define mediante una variable antes de que se ejecute la herramienta. La variable apunta a la localización y nombre que tendrá el ráster del vínculo de menor coste.bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)