Wenn Sie Ihr Ergebnis im Service-Editor veröffentlichen, geben Sie den Eingabemodus für jeden Task-Parameter an. Der verwendete Modus gibt an, wie Clients einen Wert an den Task-Parameter übergeben. In diesem Thema erfahren Sie, warum einige Eingabemodusoptionen für bestimmte Parameter nicht verfügbar sind, und lernen Methoden zum Erstellen von Tasks kennen, die mit den verfügbaren Eingabemodusoptionen verwendet werden können.
Sie erinnern sich, es gibt drei Eingabemodusoptionen:
- Benutzerdefinierter Wert: der Client stellt einen Wert für den Parameter bereit.
- Auswahlliste: dem Client wird eine Liste mit Zeichenfolgen (die Auswahlliste) angezeigt, und er muss eine oder mehrere Zeichenfolgen aus der Liste auswählen. Je nach Datentyp der Eingabe können die Zeichenfolgen in der Auswahlliste die Namen der Layer oder einfache Schlüsselwortoptionen sein.
- Konstanter Wert: der Task verwendet den Wert, den Sie für den Parameter angegeben haben, als das Ergebnis erstellt wurde. Da der Wert konstant ist, kann der Client ihn nicht ändern; daher wird es kein Task-Parameter, wenn der Service veröffentlicht wird.
Der verfügbare Eingabemodus für einen bestimmten Parameter hängt vom Parameter-Datentyp des Werkzeugs ab. Es gibt drei Kategorien von Datentypen:
- Dataset: auf der Festplatte gespeicherte Daten, wie Feature-Class, Tabelle, Ordner, Kartendokument, Datenbank usw.
- Skalar: alles, was kein Dataset ist, also Zahlen und Zeichenfolgen.
- Wertetabelle: ein spezieller Datentyp, der in einer mehrspaltigen Tabelle mit Werten dargestellt ist.
Datasets
Ein GIS-Service muss mit dem einfachsten aller Clients arbeiten: einem Webbrowser, der auf einem Computer ausgeführt wird, der nicht über GIS-Funktionen verfügt. Einfache Clients dieser Art können nur Pakete einfacher Daten an einen Server übertragen (senden und empfangen), z. B. Text, Zahlen, Dateien sowie geographische Features und deren Attribute (Felder). Im Kontext von Geoverarbeitungs-Tasks können GIS-Datasets in zwei unterschiedliche Kategorien aufgeteilt werden: übertragbar und nicht übertragbar.
- Übertragbare Datasets sind Features, Raster, Tabellen und Dateien. Parameter, die übertragbare Datasets enthalten, unterstützen den Eingabemodus Benutzerdefinierter Wert.
- Nicht übertragbare Datasets sind alle außer Features, Raster, Tabellen und Dateien. Es gibt zwei Kategorien von nicht übertragbaren Datasets.
- Komplexe Datasets sind Datasets wie geometrische Netzwerke, Netzwerk-Datasets, Topologien, TINs usw. Diese Datentypen werden als komplexe Datasets bezeichnet, weil sie komplexe Beziehungen zwischen einfachen Features modellieren.
- Container-Datasets sind Elemente wie Ordner, File- und Personal-Geodatabases sowie Kartendokumente (.mxd). Diese Datentypen enthalten eine gemischte Sammlung anderer Datasets – daher der Name Container.
Bestimmen des Datentyps eines Werkzeugparameters
Um zu bestimmen, ob ein Task-Parameter den Eingabemodus Benutzerdefinierter Wert unterstützt, können Sie ihn im Service-Editor überprüfen und nachschauen, ob der Eingabemodus als Auswahl angezeigt wird. Sie können auch festlegen, ob Benutzerdefinierter Wert unterstützt wird, bevor Sie den Service-Editor aufrufen, indem Sie den Datentyp des Werkzeugparameters mit einer der folgenden Methoden bestimmen:
- Auf der Referenzseite eines Werkzeugs enthält der Syntaxbereich eine Tabelle, die jeden Parameter beschreibt. Die letzte Spalte dieser Tabelle enthält den Datentyp des Parameters.
- Klicken Sie in ModelBuilder mit der rechten Maustaste auf eine Variable, klicken Sie auf Eigenschaften, und klicken Sie dann auf die Registerkarte Datentyp. Der Datentyp wird im oberen Bereich des Dialogfeldes aufgeführt.
- Für ein Skriptwerkzeug klicken Sie im Fenster Katalog mit der rechten Maustaste auf das Skriptwerkzeug und anschließend auf Eigenschaften. Klicken Sie im Eigenschaftendialogfeld auf die Registerkarte Parameter. Der Datentyp jedes Parameters wird in der Parametertabelle aufgelistet.
Auswahllisten und nicht übertragbare Datasets
Wenn der Wert eines Eingabeparameters ein Layer ist, der ein nicht übertragbares Dataset referenziert, können Sie die Auswahlliste als Eingabemodusoption verwenden. Beispielsweise kann der Parameter Transportation mode network in einem Task verwendet werden, mit dem nach der besten Route für die Fortbewegungsart des Benutzers (mit dem Auto, mit dem Fahrrad oder als Fußgänger) gesucht wird.
Der Datentyp dieses Parameters ist Netzwerk-Dataset-Layer. Netzwerk-Datasets sind komplexe Datasets, die nicht über das Internet übertragen werden können, daher ist Benutzerdefinierter Wert für diesen Parameter nicht verfügbar. Sie können jedoch eine Auswahlliste verwenden, um eine Auswahl an Layer-Namen zur Verwendung anzugeben. Der Client wählt einen der Layer-Namen aus der Auswahlliste aus, und der Task verwendet den vom Client ausgewählten Layer, um auf das Netzwerk-Dataset zuzugreifen, das vom Layer referenziert wird und auf dem Server gespeichert ist.
Die meisten komplexen Datasets haben eine zugehörige Layer-Repräsentation. In dem Beispiel oben handelte es sich um Netzwerk-Dataset-Layer. Andere komplexe Datasets enthalten TIN-Layer, geostatistische Layer, Parcel-Fabric-Layer und LAS-Dataset-Layer. Wenn Sie über ein nicht übertragbares Dataset verfügen, können Sie seine Layer-Repräsentation als Eingabewert verwenden. Der oben angegebene Beispiel-Task wurde durch Ausführung eines Modells und Angabe des Straßennetz-Layers als Eingabe erstellt. Wenn das Modell durch Angabe des Pfades zu einem Netzwerk-Dataset auf der Festplatte statt eines Layer-Namens ausgeführt wurde, wird der Eingabemodus auf Konstanter Wert gesetzt. Sie müssen das Werkzeug mit einem Layer als Eingabe ausführen, damit die Option Auswahlliste angezeigt wird.
Zusammenfassung:
- Clients können einfache Features, Tabellen, Raster und Dateien über das Internet übertragen (senden und empfangen).
- Komplexe Datasets wie Netzwerk-Datasets, TINs und Parcel-Fabrics sind nicht übertragbar. Container-Datasets wie Ordner, Geodatabases und Kartendokumente sind ebenfalls nicht übertragbar. Das heißt, es gibt keine Möglichkeit für einen Client, diese komplexen Datasets oder Container zu erstellen und über das Internet zu übertragen. Dies gilt selbst für voll funktionstüchtige Clients wie ArcMap.
- Die meisten komplexen Datasets verfügen über eine Layer-Repräsentation, d. h., wenn Sie das Dataset zu ArcMap hinzufügen, wird ein Layer im Inhaltsverzeichnis erstellt.
- Sie können eine Auswahlliste mit Layer-Namen erstellen, und der Client wählt einen oder mehrere dieser Layer-Namen als Eingabe für den Task aus. Der Task verwendet dann das vom Layer referenzierte Dataset.
- Um eine Auswahlliste mit Layer-Namen zu erstellen, müssen Sie das Werkzeug mit einem Layer als Eingabe ausführen. Im Service-Editor wird die Auswahlliste über die entsprechenden Layer im Inhaltsverzeichnis gefüllt.
- Wenn Sie das Werkzeug mit dem Pfad zu einem Dataset auf der Festplatte ausführen, ist die Option Auswahlliste nicht verfügbar, selbst wenn Layer des entsprechenden Typs im Inhaltsverzeichnis vorhanden sind.
Konstanter Wert und komplexe Datasets
Wenn eine Eingabe für Ihren Task ein Pfad zu einem komplexen Dataset ist (z. B. D:\mydata\chicago.gdb\transportation\streetnetwork, ein Netzwerk-Dataset), wird der Eingabemodus auf Konstanter Wert festgelegt. Wenn Sie mit dem Eingabemodus Konstanter Wert veröffentlichen, wird das Dataset auf den Server kopiert (falls es sich nicht im Data Store des Servers befindet), und der Task verwendet das kopierte Dataset.
Wenn Sie das Dataset zu ArcMap hinzufügen können, um einen Layer zu erstellen, können Sie das Werkzeug erneut mit dem Layer als Eingabe ausführen. Dadurch wird ein neues Ergebnis erstellt, das Sie freigeben können, und der Service-Editor unterstützt den Eingabemodus Auswahlliste.
Konstanter Wert und Container-Datasets
Container sind Elemente wie Ordner, File- und Personal-Geodatabases sowie Kartendokumente (.mxd). Diese Datentypen enthalten eine gemischte Sammlung anderer Datasets – daher der Name Container. Container sind nicht übertragbar, und die allgemeine Regel ist, dass ein Container und sein gesamter Inhalt auf den Server kopiert wird (falls der Container sich nicht im Datenspeicher des Servers befindet). Der veröffentlichte Task verwendet dann den kopierten Container. Einige häufig verwendete Container sind unten näher erläutert.
Ordner
Wenn die Eingabe für den Task ein Ordner ist, wird der Eingabemodus auf Konstanter Wert festgelegt. Wenn Sie mit dem Eingabemodus Konstanter Wert veröffentlichen, wird der Ordner und sein Inhalt (siehe Hinweis unten) auf den Server kopiert (falls er sich nicht im Data Store des Servers befindet), und der Task verwendet den kopierten Ordner.
Kartendokumente (.mxd)
Wenn die Eingabe für den Task ein Kartendokument ist, wird der Eingabemodus auf Konstanter Wert festgelegt. Wenn Sie mit dem Eingabemodus Konstanter Wert veröffentlichen, werden das Kartendokument, alle seine Layer und alle von den Layern referenzierten Datasets auf den Server kopiert (falls das Kartendokument sich nicht im Data Store des Servers befindet). Wenn eines der referenzierten Datasets nicht auf dem Datenspeicher des Servers gefunden werden kann, wird es ebenfalls auf den Server kopiert. Im Wesentlichen wird das Kartendokument gepackt, an den Server gesendet und dann auf dem Server entpackt.
Geodatabases
Wenn die Eingabe für den Task eine Geodatabase ist, wird der Eingabemodus auf Konstanter Wert festgelegt. Wenn Sie mit dem Eingabemodus Konstanter Wert veröffentlichen, wird die Geodatabase und ihr Inhalt auf den Server kopiert (falls sie sich nicht im Data Store des Servers befindet), und der Task verwendet die kopierte Geodatabase.
Personal-Geodatabases (.mdb) werden auf den Serverplattformen (64-Bit-Betriebssysteme) nicht unterstützt. Sie werden beim Kopieren auf den Server in File-Geodatabases konvertiert. Enterprise-Geodatabases werden beim Kopieren auf den Server ebenfalls in File-Geodatabases konvertiert.
Nicht übertragbare Ausgaben
Wenn die Ausgabe des Werkzeugs ein komplexes Dataset oder ein Container-Dataset ist, kann sie nicht zurück an den Client übertragen werden. Im Service-Editor zeigen die Ausgabe-Parameter den Datentyp Zeichenfolge an. In der Abbildung unten ist der vom Task zurückgegebene Wert der Name des erstellten TIN-Datasets, nicht das Dataset selbst.
Sie haben mehrere Optionen zur Handhabung von nicht transportierbaren Ausgaben.
- Verwenden Sie einen Kartenservice des Ergebnisses, um das Ergebnis als Karte an den Client zu senden. Es wird kein Dataset an den Client übertragen, nur eine Karte der Daten.
- Konvertieren Sie das Dataset in ein übertragbares Dataset. Sie können beispielsweise das Werkzeug TIN in Raster verwenden, um ein (nicht übertragbares) TIN in ein (übertragbares) Raster-Dataset zu konvertieren.
- Erstellen Sie ein Layer-Paket (.lpk) des Datasets mithilfe eines der Werkzeuge im Toolset "Layer und Tabellensichten", und verwenden Sie dann das Werkzeug Layer packen, um das Layer-Paket zu erstellen. Ein Layer-Paket ist eine Datei, und Dateien können über das Internet übertragen werden. Der Client muss das Paket entpacken.
- Verwenden Sie das ZIP-Komprimierungsprogramm, um eine Datei des Ergebnis-Datasets oder des Ordners zu erstellen und die .zip-Datei an den Client zu übertragen. Das Entpacken der Datei erfolgt durch den Client. Im Beispiel für einen Service zum Ausschneiden und Senden werden Layer aus einem Untersuchungsgebiet in eine File-Geodatabase (und andere Formate) übertragen. Anschließend wird eine .zip-Datei für die Übertragung an den Client erstellt. Wenn Sie diese Technik verwenden möchten, finden Sie weitere Informationen unter den unten angegebenen Links:
Skalare
Ein skalarer Datentyp enthält alles, was kein Dataset ist. Skalare Datentypen werden auch manchmal als einfache Datentypen bezeichnet. Es gibt viele skalare Datentypen in der Geoverarbeitung, z. B. Felder (ein Feld in einer Tabelle), SQL-Ausdrücke, Berechnungsausdrücke, Feldzuordnungen, Fuzzy-Funktionen und viele andere. Manche werden nur selten verwendet. Andere wie Felder und SQL-Ausdrücke kommen häufiger vor.
Die folgenden skalaren Datentypen werden von allen Clients voll unterstützt und können ohne Konvertierung über das Internet übertragen werden: Boolesch, Datum, Double, Lineare Einheit, Long und Zeichenfolge. Andere skalare Datentypen werden in eine Zeichenfolge konvertiert und als nicht unterstützt oder nicht übertragbar bezeichnet.
Die Konvertierung von nicht unterstützten skalaren Datentypen in eine Zeichenfolge ist selten ein Problem, da jeder Datentyp eine gut definierte Zeichenfolgendarstellung hat – Sie müssen diese nur kennen, um sie für den Client dokumentieren zu können. In manchen Fällen sollten Sie Ihr Werkzeug anpassen, sodass es die Zeichenfolgendarstellung anhand von anderen Informationen, die vom Client eingegeben wurden, zusammenstellt. Beide Verfahren werden nachfolgend erläutert. Ein spezieller Datentyp, die Wertetabelle, ist separat im Abschnitt unten beschrieben.
Suchen der Zeichenfolgendarstellung eines Parameters
Die meisten Zeichenfolgendarstellungen sind offensichtlich. Beispiel: Die Zeichenfolgendarstellung eines Felddatentyps ist der Name des Feldes. Manchmal müssen Sie etwas weiter suchen, um die Zeichenfolgendarstellung zu finden.
Das folgende Beispiel zeigt den Parameter Suchradius des Werkzeugs IDW (Inverse Weighted Distance) zur Interpolation von Oberflächen ausgehend von Punkten. Dieser Parameter besteht aus drei Teilen: der Methode (entweder "Variabel" oder "Fest") und zwei Werten für die Suchradiuseinstellungen, wie unten dargestellt.
- Um die Zeichenfolgendarstellung dieses Parameters zu suchen, schauen Sie zuerst in den Abschnitt mit der Parametersyntax auf der Referenzseite des Werkzeugs. Die erste Spalte der Tabelle enthält den Parameternamen und (aus gutem Grund) die Zeichenfolgendarstellung. Die letzte Spalte der Tabelle enthält den Datentyp des Parameters. In der Abbildung unten sehen Sie den Inhalt der ersten Spalte für den oben angegebenen Parameter Suchradius.
Sie können auch das Python-Codebeispiel unten auf der Referenzseite des Werkzeugs anzeigen, da in diesen Beispielen häufig die Zeichenfolgendarstellung von Parametern verwendet wird.
- Um die Zeichenfolgendarstellung eines Parameters anzuzeigen, führen Sie das Werkzeug aus, klicken mit der rechten Maustaste im Fenster Ergebnisse auf das Ergebnis und wählen Als Python-Snippet kopieren aus. Fügen Sie den Codeausschnitt in einen Texteditor ein und überprüfen Sie ihn. Dies ist der Codeausschnitt zur Ausführung des Werkzeugs IDW (die anfänglichen Parameter wurden zur Verkürzung entfernt): arcpy.gp.Idw_sa(...,"2","VARIABLE 12 250","#"). Wenn Sie die Zeile lesen, werden Sie feststellen, dass die Zeichenfolgendarstellung für den Suchradius (in Übereinstimmung mit der Abbildung oben) "VARIABLE 12 250" ist. Sie können zusätzliche Werkzeugausführungen durchführen, die Parameterwerte ändern und den Python-Codeausschnitt kopieren, um die Zeichenfolgendarstellung für andere Parameter zu überprüfen.
Nachdem Sie die Zeichenfolgendarstellung bestimmt haben, teilen Sie sie den Clients mit. Dazu eignet sich die Task-Dokumentation.
Weitere Informationen zur Dokumentation von Services und Tasks
Zusammensetzen der Zeichenfolgendarstellung im Werkzeug
Wenn die Zeichenfolgendarstellung sehr komplex ist oder es zu mühsam für den Client wäre, die Zeichenfolge zu erstellen, können Sie das Werkzeug so anpassen, dass es die Zeichenfolge für den Client erstellt. Ein gutes Beispiel dafür ist der Datentyp "SQL-Ausdruck". In dem unten abgebildeten Modell ist der Datentyp des Parameters Ausdruck ein SQL-Ausdruck. Damit dieses Modell als Task ausgeführt werden kann, muss der Client eine gültige SQL-Ausdruckszeichenfolge angeben.
Wenn der Zweck dieses Tasks das Auswählen von Flurstücken anhand des Besitzernamens ist, können Sie ein Modell erstellen, wo der Client den Namen des Besitzers eingibt, woraufhin eine gültige SQL-Anweisung dafür erstellt wird. Dies erfolgt ganz einfach mittels Variablenersetzung, wie unten dargestellt. Die Variable Besitzername ist ein Zeichenfolgen-Datentyp. Der Client gibt den Besitzernamen des Flurstücks ein, und es wird ein gültiger SQL-Ausdruck im Modell erstellt. Weitere Beispiele für die Verwendung der Variablenersetzung finden Sie im Thema Beispiele für die direkte Modellvariablenersetzung.
Erstellen eigener Auswahllisten
Viele Geoverarbeitungswerkzeuge definieren Auswahllisten, auch als Wertelistenfilter bezeichnet, für ihre Zeichenfolgenparameter. Das oben dargestellte Werkzeug Layer nach Attributen auswählen enthält eine Auswahlliste mit Zeichenfolgen für den Parameter Auswahltyp (NEW_SELECTION, ADD_TO_SELECTION, REMOVE_FROM_SELECTION usw.). Sie können Ihre eigene Auswahlliste für Zeichenfolgenvariablen anhand von Wertelistenfiltern erstellen.
Wertetabellen
Eine Wertetabelle ist eine mehrspaltige Tabelle, die unter anderem in den Werkzeugen Überschneiden (Intersect) und Zusammenführen (Merge) verwendet wird. In der Abbildung unten sehen Sie das Werkzeug Überschneiden (Intersect); der Parameter Eingabe-Features ist eine Wertetabelle mit zwei Spalten: Features und Rang.
Wertetabellen sind nicht übertragbar, und ihr Eingabemodus ist auf Konstanter Wert im Service-Editor festgelegt.
Wenn der Client Werte eingeben soll, statt den konstanten Wert zu verwenden, müssen Sie das Modell oder das Skript so ändern, dass es neben der Wertetabelle noch andere Datentypen verwendet.
Wertetabellen können eine beliebige Anzahl von Zeilen enthalten, und wie Sie Ihr Werkzeug anpassen, hängt davon ab, ob der Client eine feste oder eine variable Anzahl von Zeilen eingeben soll. Wenn eine der Spalten in der Wertetabelle Datasets enthält, muss die Anzahl der Zeilen feststehen, da jede Zeile einen eigenen Parameter für das Dataset benötigt.
In der Abbildung unten sehen Sie eine Technik, die Sie in ModelBuilder verwenden können, in der sich zwei Feature-Classes mit Rangstufen überschneiden, ohne dass eine Wertetabelle angezeigt wird. Die Variablen Streets und Parks werden automatisch von ModelBuilder erstellt, wenn Sie sie in die Wertetabelle eingeben. Die Variablen Streets Rank und Parks Rank werden wie folgt erstellt:
- Erstellen Sie zwei eigenständige Variablen vom Typ "Long". Benennen Sie sie um, und legen Sie sie als Modellparameter fest.
- Öffnen Sie das Werkzeug Überschneiden (Intersect), und klicken Sie auf eine Zelle in der Spalte Ränge, wie unten dargestellt. Anschließend können Sie eine der beiden erstellten Long-Variablen auswählen.
Sie können jederzeit ein Skriptwerkzeug erstellen, das individuelle Eingaben akzeptiert, den Wertetabellenparameter im Skript konstruiert und dann das Werkzeug aufruft. In dem unten angegebenen Code wird eine Überschneidung zweier Feature-Classes ohne Verwendung eines Wertetabellenparameters durchgeführt.
# Script tool to intersect two feature classes.
#
import arcpy
inFeatures1 = arcpy.GetParameterAsText(0) # data type = Feature layer
inRank1 = arcpy.GetParameterAsText(1) # data type = Long integer
inFeatures2 = arcpy.GetParameterAsText(2) # data type = Feature layer
inRank2 = arcpy.GetParameterAsText(3) # data type = Long integer
outFeatures = arcpy.GetParameterAsText(4) # data type = Feature class
# Default values
#
joinAttributes = "ALL"
xyTolerance = "#"
outputType = "INPUT"
# Construct the value table parameter, a list of lists
#
valueTable = [ [inFeatures1, inRank1], [inFeatures2, inRank2] ]
arcpy.Intersect_analysis(valueTable, outFeatures, joinAttributes,
xyTolerance, outputType)
Im Beispiel unten wird das Werkzeug Zusammenführen (Dissolve) verwendet, um die Verwendung von Zeichenfolgendarstellungen für Parameter und eine variable Anzahl von Zeilen in einer Wertetabelle zu veranschaulichen. Das Werkzeug Zusammenführen (Dissolve) akzeptiert eine Feature-Class oder einen Layer mit Linien bzw. Polygonen und aggregiert die Features basierend auf Werten in einem oder mehreren Feldern im Parameter Dissolve-Feld(er). Während der Aggregation können Sie Statistiken über die aggregierten Features mit dem Parameter Statistikfeld(er) berechnen (eine Wertetabelle).
Sofern der Client Dissolve-Felder und Statistikfelder angibt, die sich in den Eingabe-Features befinden, wird der Task ausgeführt. Dazu müssen Sie ein Skriptwerkzeug erstellen, das die Zeichenfolgendarstellung der Parameter Dissolve-Feld(er) und Statistikfeld(er) akzeptiert, statt eine Auswahlliste der Felder anzuzeigen, die sich im Eingabe-Feature-Schema befinden. Genau genommen umgehen Sie die intelligenten Funktionen in den Werkzeugdialogfeldern und im Service-Editor und führen das Tool nur mit der Zeichenfolgendarstellung der Parameter aus.
# Script tool code to do a Dissolve using strings for the Dissolve Fields(s) and
# Statistics Fields(s) parameters
#
import arcpy
inFeatures = arcpy.GetParameterAsText(0) # data type = Feature layer outFeatures = arcpy.GetParameterAsText(1) # data type = Feature class dissolveFields = arcpy.GetParameterAsText(2) # data type = String statFields = arcpy.GetParameterAsText(3) # data type = String multi_part = False # Always produce single-part features unsplit_lines = True # Only dissolve lines if the share common vertex
arcpy.Dissolve_management(inFeatures, outFeatures, dissolveFields, statFields, multi_part, unsplit_lines)
Wenn dieses Skriptwerkzeug ausgeführt wird, geben Sie die Zeichenfolgendarstellung für die Parameter Dissolve-Feld(er) und Statistikfeld(er) an. Anhand der Abbildung oben ergibt sich Dissolve-Feld(er) = DISTRICT und Statistikfeld(er) = POP98 SUM;NAME FIRST. (Ausführliche Informationen zum Suchen der Zeichenfolgendarstellung eines Datentyps finden Sie weiter oben.) Im Service-Editor können Sie die beiden Parameter auf Benutzerdefinierter Wert setzen, da es sich um Zeichenfolgen handelt.