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.

Beispiel für If-Then-Else

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: 
   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)) 




7/10/2012