Utilizar la lógica If-Then-Else para ramificación
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 se puede explicar como: IF: si alguna condición es verdadera, se realiza una acción; ELSE: si la condición es falsa, se realiza una acción diferente.
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 secuencia de comandos, 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. La secuencia de comandos genera dos variables, una que representa la condición if (verdadero) y otra que representa la condición else (falsa).
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: tb = sys.exc_info()[2] tbinfo = traceback.format_tb(tb)[0] pymsg = tbinfo + "\n" + str(sys.exc_type)+ ": " + str(sys.exc_value) arcpy.AddError("Python Messages: " + pymsg + " GP Messages: " + arcpy.GetMessages(2))