Definieren von Parametern in einer Python-Toolbox
Fast alle Werkzeuge verfügen über Parameter, deren Werte im Werkzeugdialogfeld oder innerhalb eines Skripts festgelegt werden. Wenn das Werkzeug ausgeführt wird, werden die Parameterwerte an den Quellcode des Werkzeugs übergeben. Das Werkzeug liest die Werte und setzt dann seine Arbeit fort.
Weitere Informationen zu Parametern finden Sie unter Parameter der Skriptwerkzeuge.
In einer Python-Toolbox (.pyt) werden die Werkzeugparameter in der getParameterInfo-Methode einer Werkzeugklasse definiert, indem Parameter-Objekte erstellt und ihre Eigenschaften festgelegt werden.
Parameter-Objekte weisen viele Lese-/Schreibeigenschaften auf. Für jeden Parameter sollten u. a. die folgenden Eigenschaften festgelegt werden:
Eigenschaft | Beschreibung |
---|---|
displayName | Der Parametername, wie er im Dialogfeld des Werkzeugs angezeigt wird. |
name | Der Parametername, wie er in der Syntax des Werkzeugs in Python angezeigt wird. |
datatype | Jedem Parameter in der Python-Toolbox ist ein Datentyp zugewiesen. Wenn Sie das Dialogfeld des Skriptwerkzeugs öffnen, überprüft die Geoverarbeitung den Parameterwert anhand des Datentyps. Der Datentyp wird auch bei der Suche nach Daten verwendet. Im Dialogfeld für die Suche werden nur Daten angezeigt, die mit dem Datentyp des Parameters übereinstimmen. Eine Liste von Parameterdatentypen finden Sie unter Definieren von Parameterdatentypen in einer Python-Toolbox. Es sind viele verschiedene Datentypen verfügbar. Zu den am häufigsten verwendeten Datentypen gehören "String", "Double", "Boolean", "Feature-Layer" und "Raster-Dataset". |
parameterType | Es gibt drei Auswahlmöglichkeiten für "parameterType":
|
direction | Diese Eigenschaft gibt an, ob der Parameter eine Eingabe für das Werkzeug oder eine Ausgabe des Werkzeugs ist. Wenn parameterType auf "Abgeleitet" festgelegt ist, sollte der Parameter direction auf "Ausgabe" festgelegt sein. |
Im Beispiel weiter unten werden drei Parameter für ein Werkzeug definiert: ein Eingabeparameter, für den ein Feature-Layer angegeben werden kann, ein Eingabeparameter, für den ein neuer Feldname angegeben werden kann, und ein abgeleiteter Ausgabeparameter, der auf dem ersten Eingabeparameter basiert. Um die Parameter in dem Werkzeug anzuzeigen, geben Sie die Parameter am Ende der Methode getParameterInfo zurück.
def getParameterInfo(self):
#Define parameter definitions
# First parameter
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
# Second parameter
param1 = arcpy.Parameter(
displayName="Sinuosity Field",
name="sinuosity_field",
datatype="Field",
parameterType="Optional",
direction="Input")
param1.value = "sinuosity"
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
params = [param0, param1, param2]
return params
Arbeiten mit abgeleiteten Ausgaben
Der letzte oben gezeigte Parameter ist ein abgeleiteter Ausgabeparameter. Ein abgeleiteter Ausgabeparameter kann in den folgenden fünf Fällen verwendet werden:
- Ausgabe und Eingabe sind identisch, z. B. Feld berechnen oder das oben gezeigte Beispiel. Mit Feld berechnen werden die Werte eines bestimmten Feldes in der Eingabetabelle geändert – es wird weder eine neue Tabelle erstellt noch das Schema der Eingabe geändert. Andere Werkzeuge, bei denen Aus- und Eingabe ebenfalls identisch sind, finden Sie in der Editing-Toolbox.
- Das Werkzeug ändert das Schema der Eingabe; Beispiel: Feld hinzufügen. Mit dem Werkzeug Feld hinzufügen wird der Eingabetabelle ein Feld hinzugefügt – es wird keine neue Ausgabetabelle erstellt.
- Das Werkzeug erstellt die Ausgabe anhand von Informationen in anderen Parametern, wie z. B. das Werkzeug Feature-Class erstellen. Mit dem Werkzeug Feature-Class erstellen geben Sie den Workspace und den Namen der neuen Feature-Class an. Die Feature-Class wird dann für Sie erstellt.
- Das Werkzeug gibt einen Skalarwert und kein Dataset aus. Von Anzahl erhalten wird beispielsweise ein "Long"-Wert ausgegeben (die Anzahl von Datensätzen). Immer wenn ein Werkzeug einen Skalarwert ausgibt, ist die Ausgabe abgeleitet.
- Das Werkzeug erstellt Daten an einem bekannten Ort. Beispiel: Sie verfügen über ein Skript, das eine bestehende Tabelle in einem bekannten Workspace aktualisiert. Benutzer müssen diese Tabelle nicht im Dialogfeld bzw. bei der Skripterstellung angeben.
Erstellen von mehrwertigen Parametern
Wenn der Parameter nicht nur einen Wert, sondern eine Werteliste verarbeiten soll, setzen Sie die Eigenschaft multiValue auf "Wahr".
In Werkzeugdialogfeldern gibt es, wie unten zu sehen, zwei Steuerelemente auf der Benutzeroberfläche, die für mehrwertige Parameter verwendet werden.
- Bei Feldern, Zeichenfolgen sowie "Long"- und "Double"-Werten mit einem Wertelisten-Filter (ValueList-Filter) wird eine Liste mit Kontrollkästchen verwendet.
- Bei allen anderen Datentypen wird das Steuerelement für mehrwertige Parameter verwendet.
Die folgende Abbildung zeigt die beiden Steuerelemente für mehrwertige Parameter.
![]() |
Ausgehend von der obigen Abbildung wird der Parameterwert auf ["Interstates", "Primary roads", "Secondary roads"] festgelegt, wenn alle Straßenarten vom Benutzer ausgewählt werden.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input",
multiValue=True)
Erstellen von Wertetabellen-Parametern
Einige Parameter – mit der Bezeichnung "Wertetabelle", ermöglichen die Eingabe von mehreren Einträgen. Im Werkzeug Anhängen, Vereinigen (Union) und einer Reihe von anderen Werkzeugen können Sie z. B. mehrere Datasets für den Parameter Eingabe-Features eingeben. Für den Parameter Statistikfeld(er) können Sie bei den Werkzeugen Zusammenführen (Dissolve) und Summenstatistik mehrere Felder einbinden.
![Abbildung eines mehrwertigen Steuerelements Abbildung eines mehrwertigen Steuerelements](0015/GUID-465142CA-D902-448F-A35D-05EC05A80E88-web.png)
Wertetabellenparameter werden definiert, indem datatype auf GPValueTable festgelegt wird und die Datentypen und Spaltenüberschriften des Parameters mit einer columns-Eigenschaft festgelegt werden. Im Beispiel unten wird ein Wertetabellen-Parameter mit zwei Spalten definiert, für die Feature-Layer und Ganzzahlwerte (GPLong) eingegeben werden können.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName='Input Features',
name='in_features',
datatype='GPValueTable',
parameterType='Required',
direction='Input')
param0.columns = [['Feature Layer', 'Features'], ['Long', 'Ranks']]
Legen Sie Standardwerte für einen Wertetabellen-Parameter mithilfe der Eigenschaft values fest, und geben Sie die Parameterwerte in einer Liste mit Werten an.
Festlegen der Standardwerte für einen Parameter
Standardwerte können für einen Parameter festgelegt werden, indem ein Wert entweder direkt mit der Eigenschaft value angewendet wird oder indem der Wert einer Umgebungseinstellung mit defaultEnvironmentName angewendet wird.
Der Standardwert entspricht dem Parameterinhalt, der beim Öffnen des Werkzeugdialogfeldes für das Skript angezeigt wird. Dieser Wert wird auch verwendet, wenn bei der Skripterstellung ein Rautenzeichen (#) für den Parameter eingegeben wird. Wenn Sie value nicht angeben, bleibt der Parameterwert leer, wenn das Dialogfeld des Skripts geöffnet wird.
Festlegen eines Standardwertes für eine Umgebung
Sie können den Standardwert für einen Parameter auf den Wert einer Umgebungseinstellung festlegen, indem Sie die Eigenschaft defaultEnvironmentName auf den Namen der Umgebungseinstellung festlegen. Sobald Sie eine Umgebungseinstellung ausgewählt haben, wird die Eigenschaft value ignoriert.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# In the tool's dialog box, the first parameter will show
# the workspace environment's value (if set)
param0.defaultEnvironmentName = "workspace"
Definieren von Parameterschemas
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, überprüft der interne Validierungscode der Geoverarbeitung die festgelegten Regeln und aktualisiert die Ausgabebeschreibung.
Weitere Informationen über Arbeiten mit Schemas finden Sie im Thema zu Schemas.
Wenn der Datentyp für den Eingabeparameter ein Feature-Set oder ein Record-Set ist, müssen Sie die Eigenschaften fieldsRule und geometryType der einzugebenden Features angeben.
Feature-Sets und Record-Sets
Die Datentypen "Feature-Set" und "Record-Set" ermöglichen die interaktive Eingabe von Daten. Bei einem Feature-Set können Benutzer Ihres Skriptes interaktiv Features in ArcMap erstellen, indem Sie auf die Karte klicken. Bei einem Record-Set können Benutzer interaktiv Zeilen in einem einfachen Tabellen-Raster erstellen.
![]() |
Die Symbologie und das Schema (Attribute und Geometrietyp) können für das Feature-Set- und Record-Set-Steuerelement festgelegt werden, indem die Eigenschaft value des Parameters auf eine Feature-Class, Tabelle oder Layer-Datei (.lyr) festgelegt wird.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Feature Set",
name="in_feature_set",
datatype="GPFeatureRecordSetLayer",
parameterType="Required",
direction="Input")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder)
param0.value = os.path.join(os.path.dirname(__file__),
"Fire_Station.lyr")
Weitere Informationen zu Feature-Sets und Record-Sets erhalten Sie, wenn Sie auf die folgenden Links klicken.
Thema |
Beschreibung |
---|---|
In diesem Thema erfahren Sie, wie Sie die FeatureSet- und RecordSet-Objekte in Python verwenden. |
|
Verwenden der Steuerelemente für interaktive Feature- und Datensatzeingabe |
In diesem Thema erfahren Sie, wie Sie die Feature-Set- und Record-Set-Steuerelemente verwenden. |
Anwenden von Filtern auf einen Parameter
Durch Anwenden eines Filters auf einen Parameter können Sie die Auswahlmöglichkeiten einschränken, 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.
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 für einen Parameter einstellen, 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.
- 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.
Falls für einen Parameter nur bestimmte Werte oder Dataset-Typen eingegeben werden sollen, können Sie einen Filter festlegen. Legen Sie die Eigenschaft type des Filters auf einen geeigneten Wert fest. Es stehen je nach Datentyp des Parameters sechs unterschiedliche Filtertypen zur Verfügung.
Filtertyp |
Werte |
---|---|
Werteliste |
Eine Liste mit Zeichenfolgen oder numerischen Werten. Wird mit den Parameterdatentypen "String", "Long", "Double" und "Boolean" verwendet. |
Bereich |
Ein Bereich zwischen Minimal- und Maximalwert. Wird mit den Datentypen "Long" und "Double" verwendet. |
Feature-Class |
Liste der zulässigen Feature-Class-Typen: "Point", "Multipoint", "Polyline", "Polygon", "MultiPatch", "Sphere", "Annotation" und "Dimension". Es können mehrere Werte für den Filter bereitgestellt werden. |
Datei |
Liste der Dateisuffixe. Beispiel: txt; e00; ditamap. |
Feld |
Liste der zulässigen Feldtypen: "Short", "Long", "Single", "Double", "Text", "Date", "OID", "Geometry", "Blob", "Raster", "GUID", "GlobalID" und "XML". Es können mehrere Werte für den Filter bereitgestellt werden. |
Workspace |
Liste der zulässigen Workspace-Typen: "File System", "Local Database" oder "Remote Database". Es können mehrere Werte bereitgestellt werden. |
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. |
In der Regel kann nur ein Filtertyp ausgewählt werden. Nur "Long" und "Double" bieten zwei Möglichkeiten: Werteliste und Bereich.
Werteliste
Der Wertelistefilter ist hilfreich, wenn Sie eine Reihe von Schlüsselwörtern bereitstellen möchten. Viele Werkzeuge verfügen über einen Satz vordefinierter Schlagwörter, wie den Parameter Feldtyp in Feld hinzufügen oder der Parameter Join Attributes in vielen Werkzeug des Toolsets "Overlay".
Der Wertelistefilter kann für die Datentypen "Long" und "Double" verwendet werden. Für diese Typen geben Sie die zulässigen numerischen Werte ein.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input value",
name="in_value",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set a value list of 1, 10 and 100
param0.filter.type = "ValueList"
param0.filter.list = [1, 10, 100]
Wenn Sie möchten, dass Benutzer unter mehreren Werten wählen können, legen Sie die Eigenschaft für mehrfache Werte, multiValue, auf "True" fest.
Eine Werteliste kann für boolesche Datentypen verwendet werden. Bei booleschen Datentypen enthält die Werteliste zwei Werte: "true" und "false". Der Wert "true" ist immer der erste Wert in der Liste. Diese Werte werden in der Befehlszeile zur Angabe des Wertes verwendet. Beispiele sind Feld hinzufügen und die Schlüsselwörter {NULLABLE | NON_NULLABLE} für die Eigenschaft IsNullable.
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 getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input range",
name="in_range",
datatype="GPLong",
parameterType="Required",
direction="Input")
# Set an acceptable range of 1 to 10
param0.filter.type = "Range"
param0.filter.list = [1, 10]
Feature-Class
Sie können für diesen Filter einen oder mehrere Filterwerte auswählen. Eingabe-Feature-Classes werden anhand der Filterwerte überprüft. Wenn Sie also beispielsweise nur "Point" als Filterwert auswählen, können Benutzer nur Point-Feature-Classes als Parameterwert eingeben.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param0.filter.list = ["Polygon"]
Datei
Der Filter der Datei enthält eine Liste mit Dateisuffixen, die eine Datei aufweisen darf, beispielsweise txt (einfache Textdatei) und 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.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input File",
name="in_file",
datatype="DEFile",
parameterType="Required",
direction="Input")
# To define a file filter that includes .csv and .txt extensions,
# set the filter list to a list of file extension names
param0.filter.list = ['txt', 'csv']
Feld
Der Feldfilter definiert die zulässigen Feldtypen: Short, Long, Float, Single, Double, Text, Date, OID, Geometry, Blob, Raster, GUID, GlobalID, XML. Es können mehrere Werte für den Filter bereitgestellt werden.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Features",
name="in_features",
datatype="GPFeatureLayer",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Field",
name="field",
datatype="Field",
parameterType="Required",
direction="Input")
# Set the filter to accept only fields that are Short or Long type
param1.filter.list = ['Short', 'Long']
param1.parameterDependencies = [param0.name]
Workspace
Der Workspace-Filter legt die zulässigen Typen für Eingabe-Workspaces fest. Es gibt drei mögliche Werte:
Workspace-Filter | Beschreibung |
---|---|
Dateisystem | Ein Systemordner zum Speichern von Shapefiles, Coverages, INFO-Tabellen und Grids |
LocalDatabase | Eine Personal- oder File-Geodatabase |
Remote-Datenbank | Eine ArcSDE-Datenbankverbindung |
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Workspace",
name="in_workspace",
datatype="DEWorkspace",
parameterType="Required",
direction="Input")
# Set the filter to accept only local (personal or file) geodatabases
param0.filter.list = ["Local Database"]
parameterDependencies
Die Eigenschaft parameterDependencies hat zwei Verwendungszwecke:
- Bei abgeleiteten Ausgabeparametern wird parameterDependencies auf den Eingabeparameter festgelegt, der vom Werkzeug geändert wird.
- Bei Eingabeparametern enthält parameterDependencies den Namen des anderen, vom Datentyp verwendeten Parameters.
# Third parameter
param2 = arcpy.Parameter(
displayName="Output Features",
name="out_features",
datatype="GPFeatureLayer",
parameterType="Derived",
direction="Output")
param2.parameterDependencies = [param0.name]
param2.schema.clone = True
Sie können die Eigenschaft parameterDependencies nur für bestimmte Eingabeparameter festlegen, wie in der folgenden Tabelle dargestellt.
Eingabedatentyp |
Datentyp des abhängigen Parameters |
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. |
symbology
Wenn die Ausgabe Ihres Werkzeugs ein Feature-Set, Raster, TIN oder ArcGIS Network Analyst-Layer ist, können Sie mit der Eigenschaft symbology den Speicherort einer Layer-Datei (.lyr) angeben. Wenn das Werkzeug in ArcMap, ArcGlobe oder ArcScene ausgeführt wird und dabei Ergebnisse des Geoverarbeitungsvorgangs der Anzeige hinzufügen aktiviert ist, wird die Ausgabe der Anzeige hinzugefügt und unter Verwendung der in der Symbologie-Layer-Datei definierten Symbologie dargestellt.
def getParameterInfo(self):
param0 = arcpy.Parameter(
displayName="Input Raster",
name="in_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Input")
param1 = arcpy.Parameter(
displayName="Output Raster",
name="out_raster",
datatype="DERasterDataset",
parameterType="Required",
direction="Output")
# Use __file__ attribute to find the .lyr file (assuming the
# .pyt and .lyr files exist in the same folder).
param1.symbology = os.path.join(os.path.dirname(__file__),
'raster_symbology.lyr')
![Hinweis Hinweis](rsrc/note.png)
Die Layer-Datei wird bei jeder Ausführung des Werkzeugs gelesen. Wenn die Layer-Datei nicht gefunden wird (da sie verschoben oder gelöscht wurde), wird die Standardsymbologie verwendet.
category
Parameter können in verschiedene Kategorien unterteilt werden. So kann die Größe des Werkzeugdialogfeldes möglichst klein gehalten werden. Bei den Network Analyst-Werkzeugen werden Kategorien verwendet, wie unten dargestellt. Parameter mit der gleichen Kategoriezeichenfolge werden zusammen gruppiert.
Kategorien werden immer nach den Parametern ohne Kategorie angezeigt. Ordnen Sie erforderliche Parameter keiner Kategorie zu, da sie sonst im Werkzeugdialogfeld ausgeblendet werden.