Programmieren einer ToolValidator-Klasse
Eine Übersicht über die ToolValidator-Klasse und die Verwendung von Parametermethoden finden Sie unter Anpassen des Verhaltens von Skriptwerkzeugen.
Parameterobjekt
Zugreifen auf Werkzeugparameter
Jeder Werkzeugparameter verfügt über ein zugehöriges Parameterobjekt mit Eigenschaften und Methoden, die für die Werkzeugvalidierung nützlich sind. Parameter sind in einer Python-Liste enthalten. Normalerweise wird die Parameterliste, wie im folgenden Code zu sehen, in der Methode ToolValidator class __init__ erstellt.
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
Sie können auf die Parameter auch wie nachfolgend dargestellt in Ihrem Skript (anstatt in der ToolValidator-Klasse) zugreifen. Der einzige Grund, über ein Skript auf die Parameterliste zuzugreifen, ist, wenn Sie die Eigenschaft symbology festlegen möchten.
import arcpy
params = arcpy.GetParameterInfo()
Weitere Informationen zum Festlegen der Symbologie in Skripten
Reihenfolge der Parameter
Die Parameter eines Werkzeugs und ihre Reihenfolge werden, wie unten dargestellt, auf der Registerkarte Parameter im Eigenschaftendialogfeld des Werkzeugs definiert.
Die Parameterliste beginnt mit dem Wert null, das heißt, der erste Parameter befindet sich an Position null in der Liste. Um auf den dritten Parameter zuzugreifen, würden Sie p3 = self.params[2] eingeben.
Methoden
Methodenname |
Verwendung |
---|---|
setErrorMessage(message:string) |
Kennzeichnet den Parameter als fehlerhaft (rotes X) und gibt die entsprechende Meldung aus. Werkzeuge werden nicht ausgeführt, wenn ein Parameter einen Fehler aufweist. |
setWarningMessage(message:string) |
Gibt an, dass für den Parameter eine Warnung vorliegt (gelbes Dreieck), und gibt die entsprechende Meldung aus. Anders als bei Fehlern werden Werkzeuge bei Warnmeldungen ausgeführt. |
setIDMessage(messageType: string, messageID: string, {AddArgument1}, {AddArgument2}) |
Ermöglicht Ihnen das Festlegen einer Systemmeldung. Die Argumente entsprechen denen der AddIDMessage-Funktion. |
clearMessage() |
Löscht alle Meldungstexte und setzt den Status auf "Information" (kein Fehler und keine Warnung). |
hasError() |
Gibt "true" zurück, wenn der Parameter einen Fehler enthält. |
hasWarning() |
Gibt "true" zurück, wenn für den Parameter eine Warnung vorliegt. |
isInputValueDerived() |
Gibt "true" zurück, wenn das Werkzeug in einem Modell überprüft wird und der Eingabewert der Ausgabe eines anderen Werkzeugs im Modell entspricht. |
Eigenschaften
Name der Eigenschaft |
Lesen/Schreiben |
Werte |
Beschreibung |
---|---|---|---|
name |
Nur Lesen |
Zeichenfolge |
Name des Parameters, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert |
direction |
Nur Lesen |
String: "Input", "Output" |
Eingabe-/Ausgaberichtung des Parameters, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert |
datatype |
Nur Lesen |
Zeichenfolge |
Datentyp, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert |
parameterType |
Nur Lesen |
String: "Required", "Optional", "Derived" |
Typ, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert |
Lesen/Schreiben |
Python-Liste |
Eine Liste der Indexwerte für jeden abhängigen Parameter |
|
Lesen/Schreiben |
Wertobjekt |
Der Wert des Parameters |
|
defaultEnvironmentName |
Nur Lesen |
Zeichenfolge |
Standardeinstellung für die Umgebung, wie auf der Registerkarte Parameter in den Werkzeugeigenschaften definiert |
enabled |
Lesen/Schreiben |
Boolesch |
"False", wenn der Parameter nicht verfügbar (ausgegraut) ist. |
Nur Lesen |
Boolesch |
"True", wenn der Wert geändert wurde. |
|
Nur Lesen |
Boolesch |
"True", wenn der Parameter von der internen Prüfroutine geprüft wurde. |
|
Lesen/Schreiben |
Zeichenfolge |
Die Kategorie des Parameters. |
|
Nur Lesen |
Geoverarbeitungs-Schema-Objekt |
Das Schema des Ausgabe-Datasets. |
|
Nur Lesen |
Geoverarbeitungs-Filterobjekt |
Der auf die Werte im Parameter angewendete Filter. |
|
Lesen/Schreiben |
Zeichenfolge |
Der Pfad zu einer Layer-Datei (.lyr), die zur Darstellung der Ausgabe verwendet wird. |
|
message |
Nur Lesen |
Zeichenfolge |
Die angezeigte Meldung. Weitere Informationen finden Sie unter SetErrorMessage und SetWarningMessage oben. |
Im Folgenden sind einige Codebeispiele aufgeführt. Weitere Codebeispiele finden Sie unter Anpassen des Verhaltens von Skriptwerkzeugen.
ToolValidator-Eigenschaften und Skriptwerkzeugeigenschaften
Der Standardwert eines Parameters sowie Filter, Symbologie und Abhängigkeiten können auf der Registerkarte Parameter im Eigenschaftendialogfeld des Skriptwerkzeugs oder in der ToolValidator-Klasse festgelegt werden.
Die in der ToolValidator-Klasse festgelegten Eigenschaften haben stets Vorrang vor den im Eigenschaftendialogfeld des Skriptwerkzeugs festgelegten Eigenschaften. Wenn Sie beispielsweise im Eigenschaftendialogfeld des Skriptwerkzeugs als Standardwert eines Parameters "BLAU" festlegen, in initializeParameters() jedoch "ROT" als Standardwert definieren, lautet der Standardwert "ROT". Nachdem initializeParameters() aufgerufen wurde, wird im Eigenschaftendialogfeld des Skriptwerkzeugs der Standardwert "ROT" angezeigt. Falls also bei Ihren Benutzern oder Ihnen selbst der Fall auftritt, dass Änderungen, die Sie an einer dieser vier Parametereigenschaften im Eigenschaftendialogfeld des Skriptes vorgenommen haben, nicht gespeichert werden, so liegt dies vermutlich daran, dass die Eigenschaft in der ToolValidator-Klasse außer Kraft gesetzt wird.
parameterDependencies
Parameterabhängigkeiten werden normalerweise für die Verwendung durch das Schema-Objekt definiert. Es gibt zwei Fälle, in denen die Abhängigkeiten unter Umständen bereits auf der Registerkarte Parameters im Eigenschaftendialogfeld des Werkzeugs festgelegt sind.
- Bei einem Ausgabe-Dataset-Parameter mit dem Typ "Derived" ist die Abhängigkeit der Indexwert des Parameters, von dem die Ausgabe abgeleitet wird.
- Bei bestimmten Eingabedatentypen ist die Abhängigkeit der Indexwert des Parameters, der die vom Steuerelement verwendeten Informationen enthält (siehe folgende Tabelle).
Eingabedatentyp |
Abhängiger Datentyp |
Beschreibung |
---|---|---|
Feld oder SQL-Ausdruck |
Tabelle |
Die Tabelle mit den Feldern |
INFO-Feld oder INFO-Ausdruck |
INFO-Tabelle |
Die INFO-Tabelle mit den Feldern |
Coverage-Feature-Class |
Coverage |
Das Coverage mit den Features |
Flächeneinheiten oder lineare Einheiten |
GeoDataset |
Geographisches Dataset, das zum Ermitteln der Standardeinheiten verwendet wird |
Koordinatensystem |
Workspace |
Workspace, der zum Ermitteln des Standardkoordinatensystems verwendet wird |
Hierarchie-Einstellungen für Network Analyst |
Netzwerk-Dataset |
Netzwerk-Dataset mit den Informationen zur Hierarchie |
Geostatistische Wertetabelle |
Geostatistischer Layer |
Der Analyse-Layer mit den Tabellen |
Abhängigkeiten werden normalerweise in der Methode initializeParameters() festgelegt:
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
#
self.params[2].parameterDependencies = [0, 1]
value
Dies ist der vom Benutzer eingegebene oder von Ihnen durch Programmierung festgelegte Wert des Parameters. Sie können den Wert in initializeParameters() festlegen. In diesem Fall wird der Wert als anfänglicher Standardwert für den Parameter verwendet. Sie können Werte auch in updateParameters() als Reaktion auf Benutzereingaben festlegen, wie unten dargestellt.
def updateParameters(self):
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or the user has set a specific distance (Altered is true).
#
if self.params[0].value:
if not self.params[6].altered:
extent = arcpy.Describe(self.params[0].value).extent
if extent.width > extent.height:
self.params[6].value = extent.width / 100
else:
self.params[6].value = extent.height / 100
return
Die Eigenschaft value eines Parameters gibt ein Objekt wieder, es sei denn, der Parameter ist nicht gefüllt, wodurch value None zurückgibt. Um zu verhindern, dass ein Parameter nicht gefüllt wird, führen Sie eine if-Prüfung durch, bevor Sie dessen Wert verwenden.
Mit dem folgenden Codeausschnitt wird überprüft, ob der Wert der Zeichenfolge "Get Spatial Weights From File" entspricht. Die Überprüfung funktioniert, weil es sich beim Datentyp des Parameters um eine Zeichenfolge handelt.
# If the option to use a weights file is selected, enable the
# parameter for specifying the file, otherwise disable it
if self.params[3].value: # check that parameter has a value
if self.params[3].value == "Get Spatial Weights From File":
self.params[8].enabled = True
else:
self.params[8].enabled = False
Verwenden Sie die Werteigenschaft des Wertobjekts, wenn eine Zeichenfolge bearbeitet oder analysiert werden soll, da ein Wertobjekt die Bearbeitung von Zeichenfolgen nicht unterstützt. Das Codebeispiel verwendet die os.path.dirname-Methode, um das Verzeichnis aus einem Dataset zurückzugeben.
if self.params[0].value:
workspace = os.path.dirname(self.params[0].value.value)
Verwenden Sie, mit Ausnahme von Describe, bei der Validierung keine Methoden, die einen Katalogpfad wie ListFields verwenden. Das Dataset ist möglicherweise nicht vorhanden, wenn das Werkzeug in ModelBuilder validiert wird, und die Methode kann fehlschlagen oder unerwartete Ergebnisse zurückgeben.
Im speziellen Fall von ListFields stellt die fields-Eigenschaft des Describe-Objekts die entsprechenden Informationen bereit.
Legen Sie keinen Parameterwert in updateMessages() fest, da dieser Wert nicht von der internen Prüfroutine geprüft wird.
altered
altered ist "true", wenn der Wert eines Parameters geändert wurde, zum Beispiel durch Eingabe eines Ausgabepfades. Nachdem der Parameter geändert wurde, bleibt er geändert, bis der Benutzer den Wert leert (ausblendet). Dann kehrt er zu seinem nicht geänderten Zustand zurück. Eine programmatische Änderung eines Wertes durch Validierungscode hat keine Auswirkung auf den geänderten Zustand. Wenn Sie also einen Wert für einen Parameter festlegen, bleibt der geänderte Zustand (altered) des Parameters unverändert.
Mit altered können Sie ermitteln, ob der Wert eines Parameters geändert werden kann. Beispiel: Ein Werkzeug verfügt über einen Feature-Class-Parameter und einen Schlüsselwortparameter. Wenn die Feature-Class Punkte oder Polygone enthält, lauten die Schlüsselwörter ROT, GRÜN und BLAU. Bei Linien lauten sie ORANGE, GELB, LILA und WEISS.
Der Benutzer gibt eine Point-Feature-Class ein. Wird der Schlüsselwortparameter nicht geändert, setzen Sie den Wert auf ROT, da dies der Standardwert ist.
Gibt der Benutzer dann eine Line-Feature-Class ein, legen Sie den Standardwert als ORANGE fest, solange der Schlüsselwortparameter nicht geändert wird.
Wenn der Schlüsselwortparameter allerdings vom Benutzer geändert wird (das heißt, das Schlüsselwort wird auf GRÜN festgelegt), sollten Sie das Schlüsselwort nicht zurücksetzen, da der Benutzer eine Wahl getroffen hat (GRÜN) und Sie die zugrunde liegende Absicht nicht kennen. Eventuell ändert der Benutzer die Feature-Class, sodass GRÜN ein gültiger Wert ist, oder er ändert das Schlüsselwort (etwa in LILA). Da GRÜN nicht zur Gruppe der Schlüsselwörter gehört, die Sie für Linien definiert haben, wird der Parameter von der internen Prüfung als fehlerhaft gekennzeichnet. Der Benutzer hat dann zwei Möglichkeiten: Änderung der Eingabe-Feature-Class oder Änderung des Schlüsselworts
if not self.params[2].altered:
self.params[2].value = "POINT"
hasBeenValidated
hasBeenValidated ist "false", wenn der Wert eines Parameters seit dem letzten Aufruf von updateParameters() und der letzten internen Prüfung geändert wurde. Nach dem Aufruf der internen Prüfung wird hasBeenValidated für jeden Parameter von der Geoverarbeitung automatisch auf "true" festgelegt.
Mit hasBeenValidated wird ermittelt, ob ein Wert seit dem letzten Aufruf von updateParameters() geändert wurde. Sie können diese Information bei der Entscheidung heranziehen, ob Sie Ihre eigene Überprüfung des Parameters vornehmen möchten.
# Set the default distance threshold to 1/100 of the larger of the width
# or height of the extent of the input features. Do not set if there is no
# input dataset yet, or if the input features have already been validated,
# or the user has set a specific distance (Altered is true).
#
import string
if self.params[0].value and not self.params[0].hasBeenValidated:
if not self.params[6].altered:
extent = arcpy.Describe(self.params[0].value).extent
width = extent.width
height = extent.height
if width > height:
self.params[6].value = width / 100
else:
self.params[6].value = height / 100
category
Parameter können in verschiedene Kategorien unterteilt werden. So kann die Größe des Werkzeugdialogfeldes möglichst klein gehalten werden. Bei den Erweiterung "ArcGIS Network Analyst"-Werkzeugen werden Kategorien verwendet, wie unten dargestellt.
Legen Sie die Kategorie in initializeParameters() fest, da sie nur einmal definiert werden kann. Das Festlegen von Kategorien in updateParameters() hat keine Auswirkungen. Mit dem folgenden Code werden die Parameter 4 und 5 in die Kategorie "Options" und die Parameter 6 und 7 in die Kategorie "Advanced" eingeordnet.
def initializeParameters(self):
self.params[4].category = "Options"
self.params[5].category = "Options"
self.params[6].category = "Advanced"
self.params[7].category = "Advanced"
Kategorien werden immer nach den Parametern ohne Kategorie angezeigt. Ordnen Sie erforderliche Parameter keiner Kategorie zu, da sie sonst möglicherweise im Werkzeugdialogfeld übersehen werden.
symbology
Durch die symbology-Eigenschaft wird eine Layer-Datei (.lyr) mit einem Ausgabeparameter verknüpft.
params[2].symbology = "E:/tools/extraction/ToolData/ClassByDist.lyr"
schema-Objekt
Jeder Ausgabeparameter des Typs Feature-Class, Tabelle, Raster oder Workspace verfügt über ein Schema-Objekt. Nur Ausgabe-Feature-Classes, Tabellen, Raster und Workspaces verfügen über ein Schema. Das Schema-Objekt wird von der Geoverarbeitung erstellt. Sie greifen über das Parameterobjekt auf das Schema zu und legen die Regeln für die Beschreibung der Werkzeugausgabe fest. Nachdem Sie die Schema-Regeln festgelegt haben (und nach der Rückkehr aus der ToolValidator-Klasse), überprüft der Geoverarbeitungscode der internen Prüfung die festgelegten Regeln und aktualisiert die Ausgabebeschreibung.
Der Ablauf des Vorgangs ist also wie folgt:
- Beim ersten Öffnen des Werkzeugdialogfeldes wird initializeParameters() aufgerufen. Sie legen die feststehenden Regeln (die von der Benutzereingabe unbeeinflusst bleiben) für die Ausgabebeschreibung fest. Zu diesem Zeitpunkt wird keine Ausgabebeschreibung erstellt, da noch keine Werte für die Parameter angegeben wurden (außer Sie haben Standardwerte bereitgestellt).
- Sobald ein Benutzer mit dem Werkzeugdialogfeld interagiert, wird updateParameters() aufgerufen.
- updateParameters() kann das Schema-Objekt ändern, um dynamischem Verhalten Rechnung zu tragen, das nicht anhand der Parameterabhängigkeiten bestimmt werden kann (etwa das Hinzufügen eines neuen Feldes wie "Feld hinzufügen").
- Im Anschluss an updateParameters() werden die internen Prüfroutinen aufgerufen, und die Beschreibung der Ausgabedaten wird anhand der im Schema-Objekt enthaltenen Regeln aktualisiert.
- Anschließend wird updateMessages() aufgerufen. Sie können die von der internen Prüfung ausgegebenen Warnungen und Fehlermeldungen überprüfen und ggf. ändern bzw. Ihre eigenen Warnungen und Fehlermeldungen hinzufügen.
Bei sämtlichen schema-Eigenschaften sind Lesen und Schreiben zulässig, mit Ausnahme von type; diese Eigenschaft ist schreibgeschützt.
Name der Eigenschaft |
Werte |
---|---|
type |
Zeichenfolge: "Feature", "Table", "Raster", "Container" (für Workspaces und Feature-Datasets) (schreibgeschützte Eigenschaft) |
clone |
Boolesch |
featureTypeRule |
Zeichenfolge: "AsSpecified", "FirstDependency" |
featureType |
Zeichenfolge: "Simple", "Annotation", "Dimension" |
geometryTypeRule |
Zeichenfolge: "Unknown", "FirstDependency", "Min", "Max", "AsSpecified" |
geometryType |
Zeichenfolge: "Point", "Multipoint", "Polyline", "Polygon" |
extentRule |
Zeichenfolge: "AsSpecified", "FirstDependency", "Intersection", "Union", "Environment" |
extent |
Ausdehnungsobjekt |
fieldsRule |
Zeichenfolge: "None", "FirstDependency", "FirstDependencyFIDs", "All", "AllNoFIDs", "AllFIDsOnly" |
additionalFields |
Python-Liste mit Feldobjekten |
cellSizeRule |
Zeichenfolge: "AsSpecified", "FirstDependency", "Min", "Max", "Environment" |
cellsize |
Double |
rasterRule |
Zeichenfolge: "FirstDependency", "Min", "Max", "Integer", "Float" |
rasterFormatRule |
Zeichenfolge: "Img", "Grid" |
additionalChildren |
Python-Liste mit Datasets, die einem Workspace-Schema hinzugefügt werden sollen |
Verwenden von "FirstDependency"
Mehrere Regeln können auf "FirstDependency" festgelegt werden. Dies bedeutet, dass der Wert des ersten Parameters verwendet wird, der im mit parameter.parameterDependencies festgelegten Array für die Parameterabhängigkeiten gefunden wird. Im folgenden Codebeispiel verfügt Parameter 2 über die beiden abhängigen Parameter 0 und 1 und die erste Abhängigkeit ist Parameter 0.
# Set the dependencies for the output and its schema properties
#
self.params[2].parameterDependencies = [0, 1]
Falls ein abhängiger Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet.
type
Die Eigenschaft type ist schreibgeschützt und wird von der Geoverarbeitung festgelegt.
clone
Wenn diese Eigenschaft auf "true" gesetzt wird, weisen Sie die Geoverarbeitung an, eine exakte Kopie (einen Klon) der Beschreibung im ersten abhängigen Parameter zu erstellen. Der Standardwert ist "false". In der Regel wird clone in der Methode initializeParameters() auf "true" festgelegt. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste geklont.
- Wenn parameter.parameterType auf "Derived" festgelegt ist, wird eine exakte Kopie angefertigt. Dieses Verhalten findet man beim Werkzeug "Feld hinzufügen".
- Wenn parameter.parameterType auf "Required" festgelegt ist, wird ebenfalls eine exakte Kopie angefertigt, der Katalogpfad zum Dataset wird jedoch geändert. Katalogpfade bestehen aus zwei Teilen: dem Workspace- und dem Basisnamen. Beispiel:
E:/Data/TestData/netcity.gdb/infrastructure/roads
- Workspace = E:/Data/TestData/netcity.gdb/infrastructure
- Basisname = roads
- Der Basisname entspricht dem Basisnamen des ersten Eingabeparameters mit einem Dataset (nicht der ersten Abhängigkeit, sondern des ersten Parameters), gefolgt vom Namen des Skriptwerkzeugs (z. B. roads_MyTool).
- Der Workspace wird auf die Umgebungseinstellung des Scratch-Workspaces festgelegt. Falls diese leer ist, wird die Umgebungseinstellung des aktuellen Workspaces verwendet. Falls diese ebenfalls leer ist, wird der Workspace des ersten Eingabeparameters mit einem Dataset verwendet. Falls dieser Workspace schreibgeschützt ist, wird das TEMP-Verzeichnis des Systems verwendet.
Nachdem clone auf "true" festgelegt wurde, werden alle regelbasierten Methoden, etwa featureTypeRule, geometryTypeRule und extentRule, auf "FirstDependency" festgelegt.
Die folgenden Codebeispiele haben beide die gleiche Funktion. Beide Beispiele basieren darauf, wie das Werkzeug Ausschneiden das Ausgabeschema erstellt.
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
# Feature type, geometry type, and fields all come from the first
# dependency (parameter 0), the input features
#
self.params[2].schema.featureTypeRule = "FirstDependency"
self.params[2].schema.geometryTypeRule = "FirstDependency"
self.params[2].schema.fieldsRule = "FirstDependency"
# The extent of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
self.params[2].schema.clone = True
return
def updateParameters(self):
# The only property of the clone that changes is that the extent
# of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
featureTypeRule
Diese Einstellung bestimmt den Feature-Typ der Ausgabe-Feature-Class. Diese Regel hat keine Auswirkung auf Ausgabe-Raster oder Ausgabetabellen.
Wert |
Beschreibung |
---|---|
"AsSpecified" |
Der Feature-Typ wird durch die Eigenschaft featureType vorgegeben. |
"FirstDependency" |
Der Feature-Typ entspricht dem des ersten Parameters in den Abhängigkeiten. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
featureType
Wenn für featureTypeRule der Wert "AsSpecified" festgelegt ist, wird mit dem Wert von featureType der Feature-Typ der Ausgabe angegeben.
Wert |
Beschreibung |
---|---|
"Simple" |
Die Ausgabe enthält Simple Features. Der Geometrietyp der Features wird mit geometryTypeRule angegeben. |
"Annotation" |
Die Ausgabe enthält Annotations-Features. |
"Dimension" |
Die Ausgabe enthält Bemaßungs-Features. |
geometryTypeRule
Diese Einstellung bestimmt den Geometrietyp (zum Beispiel Punkt oder Polygon) der Ausgabe-Feature-Class.
Wert |
Beschreibung |
---|---|
"Unknown" |
Dies ist die Standardeinstellung. Normalerweise sollten Sie den Geometrietyp in updateParameters() anhand der Werte anderer Parameter ermitteln können. Sie legen diese Regel nur dann auf "Unknown" fest, wenn Ihnen nicht genügend Informationen zur Bestimmung des Geometrietyps zur Verfügung stehen. |
"FirstDependency" |
Der Geometrietyp entspricht dem des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
"Min", "Max" |
Überprüft die Geometrien aller abhängigen Parameter und legt als Ausgabegeometrietyp den angetroffenen minimalen und maximalen Typ fest. "Min" und "Max" werden wie folgt definiert:
|
"AsSpecified" |
Der Geometrietyp wird durch den Wert der Eigenschaft geometryType vorgegeben. |
geometryType
Legen Sie hier den zu verwendenden Geometrietyp ("Point", "Multipoint", "Polyline" oder "Polygon") fest, wenn geometryTypeRule auf den Wert "AsSpecified" festgelegt ist.
extentRule
Wert |
Beschreibung |
---|---|
"AsSpecified" |
Die Ausgabeausdehnung wird in der Eigenschaft extent angegeben. |
"FirstDependency" |
Die Ausgabeausdehnung entspricht der des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
"Intersection" |
Die Ausgabeausdehnung entspricht dem geometrischen Schnittpunkt aller abhängigen Parameter. (Dieser Wert wird, wie unten gezeigt, vom Werkzeug Ausschneiden verwendet.) |
"Union" |
Die Ausgabeausdehnung entspricht der geometrischen Vereinigung aller abhängigen Parameter. |
"Environment" |
Die Ausdehnung der Ausgabe wird anhand der Umgebungseinstellung für die Ausgabeausdehnung berechnet. |
Beispiel
# The extent of the output is the intersection of the input features
# and the clip features (the dependent parameters)
#
self.params[2].schema.extentRule = "Intersection"
extent
Legen Sie hier die Ausdehnung fest, die verwendet werden soll, wenn extentRule auf den Wert "AsSpecified" festgelegt ist. Sie können dabei entweder eine durch Leerzeichen getrennte Zeichenfolge oder ein Python-Listenobjekt mit vier Werten verwenden. Die Abfolge lautet: xmin, ymin, xmax, ymax.
Beispiel
self.params[2].schema.extentRule = "AsSpecified"
self.params[2].schema.extent = "123.32 435.8 987.3 567.9"
oder bei Verwendung einer Python-Liste
xmin = 123.32
ymin = 435.8
xmax = 987.3
ext = [xmin, ymin, xmax, 567.9]
self.params[2].schema.extent = ext
fieldsRule
fieldsRule bestimmt, welche Felder in der Ausgabe-Feature-Class bzw. in der Ausgabetabelle vorhanden sind.
In der folgenden Tabelle steht FID für "Feature-ID", bezieht sich jedoch genau genommen auf das ObjectID-Feld in allen Feature-Classes und Tabellen.
Wert |
Beschreibung |
---|---|
"None" |
Es werden keine Felder außer der Objekt-ID ausgegeben. |
"FirstDependency" |
Die Ausgabefelder entsprechen denen des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
"FirstDependencyFIDs" |
Nur die ObjectID der ersten abhängigen Eingabe wird in die Ausgabe geschrieben. |
"All" |
Alle Felder in der Liste der abhängigen Parameter werden ausgegeben. |
"AllNoFIDs" |
Alle Felder mit Ausnahme der ObjectIDs werden in die Ausgabe geschrieben. |
"AllFIDsOnly" |
Alle ObjectID-Felder werden in die Ausgabe geschrieben, aber keine anderen Felder der Eingaben. |
Beispiel für das Werkzeug Ausschneiden mit dem Wert "FirstDependency" für die Einstellung fieldsRule
def initializeParameters(self):
# Set the dependencies for the output and its schema properties
# The two input parameters are feature classes.
#
self.params[2].parameterDependencies = [0, 1]
# Feature type, geometry type, and fields all come from the first
# dependency (parameter 0), the input features
#
self.params[2].schema.featureTypeRule = "FirstDependency"
self.params[2].schema.geometryTypeRule = "FirstDependency"
self.params[2].schema.fieldsRule = "FirstDependency"
# The extent of the output is the intersection of the input features
# and the clip features (parameter 1)
#
self.params[2].schema.extentRule = "Intersection"
return
additionalFields
Neben den Feldern, die durch die fieldsRule-Anwendung hinzugefügt werden, können Sie der Ausgabe weitere Felder hinzufügen. Für additionalFields ist eine Python-Liste mit Feldobjekten erforderlich.
cellSizeRule
Hierdurch wird die Zellengröße für Ausgabe-Raster oder Ausgabe-Grids bestimmt.
Wert |
Beschreibung |
---|---|
"AsSpecified" |
Die Zellengröße der Ausgabe wird in der Eigenschaft cellSize angegeben. |
"FirstDependency" |
Die Zellengröße wird anhand des ersten abhängigen Parameters berechnet. Falls es sich bei dem abhängigen Parameter um ein Raster handelt, wird dessen Zellengröße verwendet. Bei anderen Arten von abhängigen Parametern wie Feature-Classes oder Feature-Datasets wird die Zellengröße anhand der Ausdehnung der Daten berechnet. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
"Min", "Max" |
"Min" bedeutet, dass die Zellengröße der Ausgabe der kleinsten Zellengröße der abhängigen Parameter entspricht. "Max" bedeutet, dass sie der größten Zellengröße der abhängigen Parameter entspricht. |
"Environment" |
Die Zellengröße der Ausgabe wird anhand der Umgebungseinstellung cellsize berechnet. |
cellSize
Legen Sie hier die Zellengröße fest, die verwendet werden soll, wenn cellSizeRule auf den Wert "AsSpecified" festgelegt ist.
rasterRule
Diese Regel gibt den im Ausgabe-Raster enthaltenen Datentyp (Ganzzahl oder Gleitkommazahl) vor.
Wert |
Beschreibung |
---|---|
"FirstDependency" |
Der Datentyp (Ganzzahl oder Gleitkommazahl) entspricht dem des ersten abhängigen Parameters. Falls der erste abhängige Parameter mehrwertig ist (eine Liste mit Werten aufweist), wird der erste Wert in der Werteliste verwendet. |
"Min", "Max" |
Ganzzahl wird kleiner als Gleitkommazahl angesehen. Beispiel: Es gibt zwei abhängige Parameter, einen mit Ganzzahlen und einen mit Gleitkommazahlen. In diesem Fall erstellt "Min" eine ganzzahlige Ausgabe und "Max" eine Gleitkommaausgabe. |
"Integer" |
Das Ausgabe-Raster enthält Ganzzahlen. |
"Float" |
Das Ausgabe-Raster enthält Gleitkommazahlen (Bruchzahlen). |
rasterFormatRule
Hierdurch wird das Format des Ausgabe-Rasters ("Grid" oder "Img") bestimmt. Das Standardformat ist "Img" (ERDAS-IMAGINE-Format). "Grid" ist das Format von Esri.
additionalChildren
Ein Workspace ist ein Container für Datasets (Features, Tabellen und Raster). Die Datasets sind dem Workspace untergeordnete Elemente. Falls Ihr Werkzeug einem neuen oder bestehenden Workspace Datasets hinzufügt, können Sie die Beschreibung des Workspace aktualisieren, indem Sie Beschreibungen der untergeordneten Elemente hinzufügen. Beispiel: Ihr Werkzeug nimmt eine Liste mit Feature-Classes an (das heißt, es ist mehrwertig), ändert diese und schreibt dann die geänderten Feature-Classes in einen bestehenden Workspace. Wenn das Werkzeug in ModelBuilder verwendet wird, ist der Workspace die abgeleitete Ausgabe des Werkzeugs, und Sie können diesen Workspace als Eingabe für das Werkzeug Daten auswählen verwenden. Mit Daten auswählen können Sie ein untergeordnetes Dataset in einem Container auswählen und als Eingabe für ein anderes Werkzeug verwenden.
Bei der Eingabe für additionalChildren handelt es sich um eine oder mehrere Beschreibungen untergeordneter Elemente. Es gibt zwei Arten von untergeordneten Beschreibungen:
Formen |
Beschreibung |
---|---|
value-Objekt |
Der Wert einer Feature-Class, eines Rasters, einer Bemaßung oder einer Annotation, wie von der value-Eigenschaft zurückgegeben. |
Python-Listenobjekt des Formulars [Typ, Name, Felder, Ausdehnung, Raumbezug] |
Python-Liste mit einer Beschreibung der hinzuzufügenden untergeordneten Elemente. Nur die beiden ersten Einträge in der Liste ("Typ" und "Name") sind erforderlich. Die anderen Argumente sind optional. |
Stellen Sie eine Liste mit untergeordneten Beschreibungen zur Verfügung, wenn Sie mehrere untergeordnete Elemente hinzufügen. Falls Sie die untergeordneten Elemente mit dem Formular für Python-Listenobjekte hinzufügen, erstellen Sie eine Listenauflistung für additionalChildren.
Das Python-Listenformular hat fünf Argumente, die in der folgenden Tabelle beschrieben werden.
Argument |
Typ |
Beschreibung |
---|---|---|
type |
erforderlich |
Eine der folgenden: "Point", "Multipoint", "Polyline", "Polygon", "Table", "Raster", "Annotation", "Dimension" |
name |
erforderlich |
Der Name des Datasets. Sie können lediglich den Basisnamen des Datasets ((streets) oder den vollständigen Katalogpfad ("E:\mydata\test.gdb\infrastructure\streets") angeben. Bei Angabe des vollständigen Katalogpfades wird nur der Basisname (streets) berücksichtigt. |
Felder |
optional |
Eine Python-Liste mit Feldobjekten. Sie enthält die Felder im untergeordneten Element (sofern bekannt). |
extent |
optional |
Eine Zeichenfolge oder Python-Liste mit der räumlichen Ausdehnung des untergeordneten Elements. |
spatial reference |
optional |
Ein Raumbezugsobjekt |
Die Argumente müssen in der angegebenen Reihenfolge bereitgestellt werden. Wenn Sie ein optionales Argument überspringen möchten, verwenden Sie das Python-Schlüsselwort None oder das Rautenzeichen "#".
Nachfolgend sind einige Beispiele zum Festlegen eines Workspace-Schemas aufgeführt. Die Beispiele basieren auf einem Skriptwerkzeug mit den folgenden Argumenten:
Parametername |
Eigenschaften | |
---|---|---|
0 |
Input feature class |
Feature-Class – Eingabe |
1 |
Input table |
Tabelle – Eingabe |
2 |
Input workspace |
Workspace – Eingabe (ein bestehender Workspace, der die Ergebnisse des Werkzeugs enthält) |
3 |
Derived workspace |
Workspace – Abgeleitete Ausgabe, abgerufen von "Input_workspace" Das Schema des Workspace wird so geändert, dass es weitere untergeordnete Elemente enthält. |
Das Werkzeug nimmt die Eingabe-Feature-Class und die Eingabetabelle an, kopiert beide in den Workspace, fügt der Feature-Class ein neues Feld hinzu und erstellt dann im Workspace eine neue Polygon-Feature-Class. (Die eigentliche Funktion des Werkzeugs ist dabei unerheblich, da es nur dazu dient, die Einstellung des Workspace-Schemas darzustellen.) Die nachfolgenden Codebeispiele bauen aufeinander auf und beginnen mit der einfachsten Verwendungsweise von additionalChildren. Falls Sie diese Codebeispiele implementieren und testen möchten, können Sie den Code mit dem unten dargestellten Modell testen.
In initializeParameters() wird der Ausgabe-Workspace anhand seines abhängigen Parameters (Parameter 2) geklont. Die Abhängigkeit wird normalerweise in den Werkzeugeigenschaften festgelegt, kann jedoch auch in initializeParameters() definiert werden, um zu verhindern, dass die Abhängigkeit in den Werkzeugeigenschaften entfernt wird.
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
self.params[3].parameterDependencies = [2] # input workspace
self.params[3].schema.clone = True # Copy all existing contents to output
return
Beispiel: Die beiden Eingaben werden (ohne Änderung) in den Ausgabe-Workspace kopiert:
def updateParameters(self):
inFC = self.params[0].value # input feature class
inTable = self.params[1].value # input table
inWS = self.params[2].value # input workspace
if inFC and inTable and inWS:
self.params[3].schema.additionalChildren = [inFC, inTable]
return
Beispiel: Das Werkzeug erstellt eine neue Polygon-Feature-Class. Die einzigen bekannten Eigenschaften dieser neuen Feature-Class (bei der Validierung) sind der Name ("SummaryPolygon") und der Typ ("polygon").
children = [] # New empty list
children.append(inFC)
children.append(inTable)
children.append(["polygon", "SummaryPolygon"])
self.params[3].schema.additionalChildren = children
Beispiel: Der Eingabe-Feature-Class wird ein Feld hinzugefügt.
# Create a field object with the name "Category" and type "Long"
#
newField = arcpy.Field()
newField.name = "Category"
newField.type = "Long"
# Describe the input feature class in order to get its list of fields. The 9.3
# version of the geoprocessing object returns fields in a Python list, unlike
# previous versions, which returned fields in an enumerator.
#
desc = arcpy.Describe(inFC)
fieldList = desc.fields
# Add the new field to the list
#
fieldList.append(newField)
# Create a new child based on the input feature class, but with the
# additional field added
#
newChild = [desc.shapeType, desc.catalogPath, fieldList,
desc.extent, desc.spatialReference]
# Now create our list of children and add to the schema
#
children = []
children.append(newChild)
children.append(inTable)
children.append(["polygon", "SummaryPolygon"])
self.params[3].schema.additionalChildren = children
Um Felder für SummaryPolygon (die neue Polygon-Feature-Class) zu erstellen, erstellen Sie eine Liste mit Feldobjekten in Anlehnung an das oben gezeigte Muster.
Beispiel: Mehrwertige Eingabe
In diesem Beispiel ist der erste Parameter ein mehrwertiger Parameter mit Feature-Classes. Jede Feature-Class im mehrwertigen Parameter wird in den abgeleiteten Workspace kopiert. Jeder der kopierten Feature-Classes wird das neue Feld "ProjectID" hinzugefügt.
# 0 - input features (multivalue)
# 1 - input workspace
# 2 - derived workspace
class ToolValidator:
def __init__(self):
import arcpy
self.params = arcpy.GetParameterInfo()
def initializeParameters(self):
self.params[2].parameterDependencies = [1]
self.params[2].schema.clone = True
return
def updateParameters(self):
inVT = self.params[0].value # multivalue ValueTable
inWS = self.params[1].value # WorkSpace
# Add each feature class to the output workspace. In addition,
# add a new field "ProjectID" to each feature class
#
if inVT and inWS:
rowCount = inVT.rowCount # Number of rows in the MultiValue table
children = []
newField = arcpy.Field()
newField.name = "ProjectID"
newField.type = "Long"
for row in range(0, rowCount):
value = inVT.getValue(row, 0)
if value:
d = arcpy.Describe(value)
fieldList = d.fields
# Note -- not checking if field already exists
#
fieldList.append(newField)
# Create new child with additional ProjectID field and
# add child to list of children
#
child = [d.shapeType, d.catalogPath, fieldList]
children.append(child)
self.params[2].schema.additionalChildren = children
return
def updateMessages(self):
return
filter-Objekt
Mit dem filter-Objekt können Sie die Auswahlmöglichkeiten festlegen, die Benutzern bei einem Parameter zur Verfügung stehen. Sie haben zum Beispiel die Möglichkeit, einen Feldfilter einzurichten, der die Auswahl auf Textfelder begrenzt. Ein Filter übernimmt drei Aufgaben:
- Durch einen Filter wird Benutzern beim Suchen nach Daten nur die gültige Auswahl angezeigt. Wenn Sie den Filter für Point-Feature-Classes festlegen, werden bei der Suche nach Daten nur Point-Feature-Classes angezeigt. Wenn Sie Filter für Textfelder definieren, werden in der Dropdown-Liste mit den Feldern nur Textfelder angezeigt.
- Falls Benutzer einen Parameterwert eingeben (anstatt einen Wert in der Liste oder im Dateibrowser auszuwählen), wird der Wert anhand des Filters überprüft. Falls ein ungültiger Wert eingegeben wird (etwa ein Zahlenfeld anstatt eines Textfeldes), wird automatisch eine Warnung oder eine Fehlermeldung angezeigt.
- Da Werte von der internen Prüfung anhand ihres Filters überprüft werden, müssen Sie keine eigene Validierung in der ToolValidator-Klasse programmieren, wenn Sie Filter verwenden.
Sie haben zwei Möglichkeiten, Filter festzulegen:
- Klicken Sie im Eigenschaftendialogfeld des Werkzeugs auf der Registerkarte Parameter auf den Parameter, klicken Sie dann auf die Zelle neben "Filter", und wählen Sie den Filtertyp in der Dropdown-Liste aus. Nachdem Sie einen Filtertyp ausgewählt haben, wird ein Dialogfeld geöffnet, in dem Sie Werte für den Filter angeben können.
- Sie können die Werte durch Programmierung in einer ToolValidator-Klasse festlegen (siehe Beispiele weiter unten). Die Geoverarbeitung erstellt automatisch Filter für Parameter mit dem Typ "string", "long", "double", "feature class", "file", "field" und "workspace". Auch wenn Sie keinen Filter im Eigenschaftendialogfeld des Werkzeugs auswählen, verfügt der Parameter über einen Filter, dieser ist dann jedoch leer. Ein leerer Filter ist das gleiche wie kein Filter. Indem Sie einem leeren Filter Werte hinzufügen, aktivieren Sie den Filter. Die Auswahlmöglichkeiten für die Benutzer werden dann durch den Filterinhalt vorgegeben.
In der folgenden Tabelle werden die sechs möglichen Filterarten vorgestellt:
Filtertyp |
Werte |
---|---|
ValueList |
Eine Liste mit Zeichenfolgen oder numerischen Werten. Wird mit den Datentypen "String", "Long", "Double" und "Boolean" verwendet. |
Bereich |
Ein Bereich zwischen Minimal- und Maximalwert. Wird mit den Datentypen "Long" und "Double" verwendet. |
FeatureClass |
Liste der zulässigen Feature-Class-Typen, angegeben mit den Werten "Point", "Multipoint", "Polyline", "Polygon", "MultiPatch", "Sphere", "Annotation", "Dimension". Es können mehrere Werte für den Filter bereitgestellt werden. |
Datei |
Liste mit Dateisuffixen, etwa ".txt", ".e00", ".ditamap". |
Feld |
Liste der zulässigen Feldtypen, angegeben durch die Werte "Short", "Long", "Single", "Double", "Text", "Date", "OID", "Geometry", "Blob", "Raster", "GUID", "GlobalID", "XML". Es können mehrere Werte für den Filter bereitgestellt werden. |
Workspace |
Liste der zulässigen Workspace-Typen, angegeben durch die Werte "FileSystem", "LocalDatabase" und "RemoteDatabase". Es können mehrere Werte bereitgestellt werden. |
Eigenschaften
Eigenschaft |
Beschreibung |
---|---|
type |
Der Filtertyp (ValueList, Range, FeatureClass, File, Field oder Workspace). Sie können den Filtertyp festlegen, wenn Sie mit "Long"- und "Double"-Parametern arbeiten (siehe Hinweis weiter unten). Bei anderen Parametertypen gibt es nur einen Filtertyp. Wenn Sie bei diesen Parametern den Filtertyp festlegen, wird er ignoriert. Falls Sie nicht möchten, dass Werte gefiltert werden, legen Sie bei der list-Eigenschaft eine leere Liste fest. |
list |
Eine Python-Liste mit Werten für den Filter. Falls Sie nicht möchten, dass Werte gefiltert werden, legen Sie bei der list-Eigenschaft eine leere Liste fest. |
ValueList
ValueList bei "String"-Parametern
Bei "String"-Parametern kann die Liste eine beliebige Anzahl von Zeichenfolgen enthalten. Unten sehen Sie ein Beispiel, wie Sie die Liste mit Zeichenfolgenwerten in initializeParameters() festlegen können. Der Parameter bietet die beiden Optionen "NEW_FORMAT" und "OLD_FORMAT".
def initializeParameters(self):
# Set the fixed list of "file format type" parameter choices and its
# default value
#
self.params[1].filter.list = ["OLD_FORMAT", "NEW_FORMAT"]
self.params[1].value = "OLD_FORMAT"
return
Im obigen Beispiel könnten Sie die Werteliste auch im Eigenschaftendialogfeld des Werkzeugs auf der Registerkarte "Parameter" festlegen. Selbst wenn Sie in den Werkzeugeigenschaften für die Werteliste etwas anderes angeben, zum Beispiel "OLD" und "NEW", werden diese Werte beim Aufruf von initializeParameters() durch "OLD_FORMAT" und "NEW_FORMAT" ersetzt. Das Gleiche gilt für den Standardwert: Sie können diesen Wert im Eigenschaftendialogfeld des Werkzeugs festlegen und dann in ToolValidator zurücksetzen.
Die in ToolValidator bereitgestellte Werteliste ersetzt immer die im Eigenschaftendialogfeld des Werkzeugs angegebenen Werte. Daher haben Sie die Möglichkeit, Werte auf Grundlage von anderen Parametern zu aktualisieren.
Aufbauend auf diesem Beispiel zeigt der folgende Code, wie eine Liste von Werten in einem anderen Parameter von updateParameters() geändert wird, je nachdem, ob "OLD_FORMAT" oder "NEW_FORMAT" ausgewählt wird:
def updateParameters(self):
# Update the value list filter of the "feature type in file" parameter
# depending on the "file format type" parameter.
#
if self.params[1].value.upper() == "OLD_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON"]
elif self.params[1].value.upper() == "NEW_FORMAT":
self.params[2].filter.list = ["POINT", "LINE", "POLYGON",
"POINT_WITH_ANNO",
"LINE_WITH_ANNO",
"POLYGON_WITH_ANNO"]
# Provide default value for "feature type in file" parameter
#
if not self.params[2].altered:
self.params[2].value = "POINT"
ValueList bei "Long"- und "Double"-Parametern
Parameter mit dem Typ "Long" oder "Double" können über eine Liste mit numerischen Werten verfügen. Benutzer können nur Werte auswählen oder eingeben, die in der Liste enthalten sind.
# Set filter for a Long parameter
#
self.params[7].filter.list = [10, 20, 30, 40, 50]
# Set filter for a Double parameter
#
self.params[8].filter.list = [10.0, 12.5, 15.0]
ValueList bei "Boolean"-Parametern
Für Parameter mit dem Typ "Boolean" gibt es zwei Werte: "true" und "false". Der Wert "true" ist immer der erste Wert in der Liste.
def initializeParameters(self):
# Set the Boolean choice for including or excluding angles
#
self.params[6].filter.list = ["ANGLE", "NO_ANGLE"]
# Set the default value to false (no angle)
#
self.params[6].value = "NO_ANGLE"
return
def updateParameters(self):
# Enable angle format parameter if user wants angles
#
if self.params[6].value.upper() == "ANGLE":
self.params[7].enabled = True
Bereich
Parameter des Typs "Long" und "Double" können einen Bereichsfilter aufweisen. Bereichsfilter haben zwei Werte: den Minimal- und den Maximalwert. Der erste Wert in der Liste ist der Minimalwert. Der Bereich ist einschließend, das heißt, Minimalwert und Maximalwert gehören zur gültigen Auswahl.
def initializeParameters(self):
# Utility values must be between -10 and 10.
#
self.params[7].filter.list = [-10, 10]
Festlegen des Filtertyps bei "Long"- und "Double"-Parametern
Bei "Long"- und "Double"-Parametern ist der Standardfiltertyp "ValueList". Falls Sie einen Bereichsfilter verwenden möchten, legen Sie den Filtertyp in initializeParameters() wie folgt fest:
def initializeParameters(self):
# Set the 'score' value parameters to a range filter
#
self.params[7].filter.type = "Range"
self.params[7].filter.list = [-10, 10]
Der Filtertyp kann nur bei "Long"- und "Double"-Parametern festgelegt werden.
FeatureClass
Das folgende Beispiel zeigt, wie der Feature-Typ eines Eingabeparameters anhand des Feature-Typs eines anderen Eingabeparameters festgelegt wird.
def updateParameters(self):
# Set the input feature type of the second parameter based
# on the feature type of the first parameter.
#
if self.params[0].value:
desc = arcpy.Describe(self.params[0].value)
feature_type = desc.shapeType.lower()
if feature_type == "polygon":
self.params[1].filter.list = ["point", "multipoint"]
elif feature_type == "polyline":
self.params[1].filter.list = ["polygon"]
elif feature_type == "point" or \
feature_type == "multipoint":
self.params[1].filter.list = ["polyline"]
else:
self.params[1].filter.list = []
return
Datei
Der Dateifilter enthält eine Liste mit Dateisuffixen, die eine Datei aufweisen darf, wie etwa ".txt" (einfache Textdatei) oder ".csv" (kommagetrennte Werte). Sie können einen beliebigen Text für ein Suffix eingeben, es muss kein in ArcGIS bekanntes Suffix sein. Die Länge des Suffix ist nicht begrenzt. Der Punkt gehört nicht zum Suffix. Das folgende Beispiel zeigt, wie Sie den Filter für einen Eingabedateiparameter festlegen können.
def initializeParameters(self):
# Set the input file type to our recognized options file suffixes
#
self.params[0].filter.list = ["opt56", "opt57", "globalopt"]
return
Feld
Der Feldfilter bestimmt die zulässigen Feldtypen. Mögliche Werte sind "Short", "Long", "Float", "Single", "Double", "Text", "Date", "OID", "Geometry", "Blob", "Raster", "GUID", "GlobalID" und "XML".
Angezeigter Name und interner Name
Es gibt vier Feldtypen, die über einen internen Namen wie in der folgenden Tabelle dargestellt verfügen.
Angezeigter Name |
Interner Name |
---|---|
Kurz |
SmallInteger |
Long |
Ganzzahl |
Float |
Einzeln |
Text |
Zeichenfolge |
Beim Festlegen eines Feldfilters können Sie den angezeigten Namen oder den internen Namen verwenden. Die folgenden beiden Codezeilen sind also gleichwertig:
self.params[1].filter.list = ["short", "long", "float", "text"]
self.params[1].filter.list = ["smallinteger", "integer", "single", "string"]
Falls Sie den angezeigten Namen bereitstellen, etwa "short", wird dieser konvertiert und im Filter als "SmallInteger" gespeichert. Im Allgemeinen müssen Sie nicht auf Werte im Feldfilter zugreifen. Sollte dies jedoch erforderlich sein, denken Sie daran, dass dort der interne Name gespeichert ist. Der folgende Codeausschnitt zeigt, wie Sie dieser Tatsache Rechnung tragen können:
self.params[1].filter.list = ["short", "long"]
#
if self.params[1].filter.list[0].lower() == "smallinteger":
# do something
Festlegen eines Standardfeldwertes
Eventuell möchten Sie für einen Feldparameter einen Standardwert bereitstellen. Hierfür durchlaufen Sie wie folgt die Felder in der Eingabetabelle in einer Schleife und wählen das erste Feld aus, das dem Filter entspricht:
def initializeParameters(self):
self.params[1].filter.list = ["short", "long", "float", "double"]
return
def updateParameters(self):
if self.params[0].value and not self.params[1].altered:
self.params[1].value = ""
desc = arcpy.Describe(self.params[0].value)
fields = desc.fields
# Set default to the first field that matches our filter
#
for field in fields:
fType = field.type.lower()
if fType in ["smallinteger", "integer", "single", "double"]:
self.params[1].value = field.name
break
return
Verwenden Sie in ToolValidator nicht die Geoverarbeitungsfunktion ListFields. Verwenden Sie stattdessen wie oben erläutert die Funktion Describe.
Workspace
Der Workspace-Filter legt die zulässigen Typen für Eingabe-Workspaces fest. Es gibt drei mögliche Werte:
Workspace-Filter | Beschreibung |
---|---|
"FileSystem" | Ein Systemordner zum Speichern von Shapefiles, Coverages, INFO-Tabellen und Grids |
"LocalDatabase" | Eine Personal- oder File-Geodatabase |
"RemoteDatabase" | Eine ArcSDE-Datenbankverbindung |