La lógica If-Then-Else es un concepto sencillo pero importante para llevar a cabo diferentes acciones basadas en distintas condiciones. La lógica If-Then-Else (Si-entonces-si no) puede explicarse del siguiente modo: SI una condición es verdadera, ENTONCES realice una acción; SI NO, la condición es falsa, realice una acción distinta.
Utilizar la lógica If-Then-Else en ModelBuilder
Es posible implementar la lógica If-Then-Else en ModelBuilder escribiendo una herramienta de secuencia de comandos que pruebe alguna condición y, a continuación, genere dos variables booleanas que describan la condición de verdadero y falso e incorporen esta herramienta de secuencias de comandos a un modelo. Como alternativa a escribir una herramienta de script, también puede utilizar la herramienta Calcular valor para probar la condición y generar un valor booleano.
El siguiente modelo incorpora una herramienta de secuencia de comandos llamada Comprobar sistema de coordenadas para utilizar lógica de ramificación. Esta herramienta de secuencia de comandos evalúa un dataset de entrada y le indica si ese dataset tiene un sistema de coordenadas State Plane proyectadas o un sistema de coordenadas desconocido. En el modelo, si el dataset de entrada tiene un sistema de coordenadas State Plane proyectadas, no ocurrirá nada. Sin embargo, si el dataset de entrada tiene un sistema de coordenadas desconocido, el modelo definirá un sistema de proyección y proyectará los datos de entrada. Uno de los pasos clave en el uso de la lógica de ramificación en ModelBuilder es establecer una de las salidas condicionales como condición previa para su posterior procesamiento.
Ejemplos de lógica If-Then-Else
La siguiente muestra de código muestra cómo se implementa la ramificación If-Then-Else en la herramienta de secuencia de comandos Comprobar sistema de coordenadas referenciada anteriormente. El script genera dos variables, una que representa la condición if (verdadero) y otra que representa la condición else (falsa).
Ejemplo de Comprobar sistema de coordenadas
El ejemplo comprueba si los datos de entrada están en State Plane, no tienen un PRJ (archivo de definición de proyecciones) o tienen uno que no sea State Plane.
# Import modules
import arcpy
import sys
import traceback
# Set local variables
prj = ""
indata = "C:/ToolData/well.shp"
dsc = arcpy.Describe(indata)
sr = dsc.spatialReference
prj = sr.name.lower()
try:
# check if indata is in StatePlane, has no PRJ, or one other than StatePlane
if prj.find("_stateplane_") > -1:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to TRUE
arcpy.SetParameterAsText(1,"false") #The first parameter refers to the "Is Unknown" variable
arcpy.SetParameterAsText(2,"true") #The second parameter refers to the "Is StatePlane" variable
arcpy.AddMessage("Coordinate system is StatePlane")
elif prj == "unknown":
# Set the Is Unknown parameter to TRUE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"true")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("To continue, first define a coordinate system!")
else:
# Set the Is Unknown parameter to FALSE, and the Is StatePlane parameter to FALSE
arcpy.SetParameterAsText(1,"false")
arcpy.SetParameterAsText(2,"false")
arcpy.AddMessage("Coordinate system is not StatePlane or Unknown")
except Exception as e:
AddPrintMessage(e[0], 2)