Verwenden von If-Then-Else-Logik für Verzweigungen
If-Then-Else-Logik ist ein einfaches und doch leistungsfähiges Konzept zum Ausführen von verschiedenen Aktionen auf Grundlage von unterschiedlichen Bedingungen. If-Then-Else-Logik kann wie folgt erklärt werden: Wenn (IF) eine Bedingung den Wert "wahr" (true) hat, wird eine Aktion ausgeführt; falls (ELSE) die Bedingung den Wert "falsch" (false) hat, wird eine andere Aktion ausgeführt.
Verwenden von If-Then-Else-Logik in ModelBuilder
In ModelBuilder können Sie If-Then-Else-Logik implementieren, indem Sie ein Skriptwerkzeug erstellen, mit dem bestimmte Bedingungen überprüft und anschließend zwei Boolesche Variablen ausgegeben werden, die zur Beschreibung der TRUE- und FALSE-Bedingungen dienen, und dieses Skriptwerkzeug dann in ein Modell einfügen. Als Alternative zum Schreiben eines Skriptwerkzeugs können Sie auch das Werkzeug Wert berechnen verwenden, um die Bedingung zu testen und einen booleschen Wert auszugeben.
Das Modell unten enthält ein Skriptwerkzeug mit dem Namen Check Coordinate System, um Verzweigungslogik zu verwenden. Dieses Skriptwerkzeug wertet ein Eingabe-Dataset aus und teilt mit, ob dieses Dataset ein projiziertes State-Plane-Koordinatensystem oder ein unbekanntes Koordinatensystem hat. In diesem Modell erfolgt keine Aktion, wenn das Eingabe-Dataset ein projiziertes State-Plane-Koordinatensystem hat. Wenn das Eingabe-Dataset jedoch ein unbekanntes Koordinatensystem aufweist, definiert das Modell ein Projektionssystem und projiziert die Eingabedaten. Einer der Hauptschritte bei der Verwendung verzweigender Logik in ModelBuilder ist das Festlegen einer der konditionalen Ausgaben als Vorbedingung für die weitere Verarbeitung.
Beispiele für If-Then-Else-Logik
Im folgenden Codebeispiel wird gezeigt, wie If-Then-Else-Verzweigung in das oben erwähnte Skriptwerkzeug Check Coordinate System implementiert wird. Die Skriptausgabe umfasst zwei Variablen: eine für die If-Bedingung (TRUE) und eine für die Else-Bedingung (FALSE).
Dieses Beispiel überprüft, ob Eingabedaten in StatePlane vorliegen oder kein PRJ oder ein anderes als StatePlane haben.
# 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))