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

  • Erforderlich – Das Werkzeug kann erst ausgeführt werden, wenn ein Wert angegeben ist.
  • Optional – Für den Parameter ist kein Wert erforderlich.
  • Abgeleitet – Der Parameter gilt nur für Ausgabeparameter (siehe "direction" weiter unten). Abgeleitete Ausgabeparameter werden nicht im Werkzeugdialogfeld angezeigt.

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:

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.

Die folgende Abbildung zeigt die beiden Steuerelemente für mehrwertige Parameter.

Steuerelemente für mehrere Werte (MultiValue)

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

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.

Feature-Sets und Record-Sets

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

FeatureSet- und RecordSet-Objekte

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.

Themen in Bezug auf Feature-Sets und Record-Sets

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.

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.

Filtertyp und Werte

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.

filter-Eigenschaften

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:

# 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.

parameterDependencies-Datentypen

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

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.

Parameterkategorien

Kategorien werden immer nach den Parametern ohne Kategorie angezeigt. Ordnen Sie erforderliche Parameter keiner Kategorie zu, da sie sonst im Werkzeugdialogfeld ausgeblendet werden.

Verwandte Themen

5/10/2014