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. Alternativ dazu 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).
Beispiel "Koordinatensystem prüfen"
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 Exception as e:
AddPrintMessage(e[0], 2)