Verwenden von Feature-Sets und Recordsets
FeatureSet-Objekte sind kompakte Repräsentationen einer Feature-Class. Dabei handelt es sich um spezielle Datenelemente, die nicht nur das Schema (Geometrietyp, Felder, Raumbezug), sondern auch die Daten einschließlich der Geometrie selbst enthalten. RecordSet-Objekte haben ähnliche Merkmale, können jedoch eher mit einer Tabelle verglichen werden. Bei Verwendung in einem Skriptwerkzeug können Sie mit Feature-Sets und Recordsets Features und Datensätze interaktiv definieren.
Serverwerkzeuge kommunizieren mithilfe von Feature-Set- und Datensatz-Objekten, d. h., Daten müssen mit diesen Objekten erstellt bzw. in diese Objekte geladen werden, wenn Sie Serverwerkzeuge verwenden.
Feature-Set- und Datensatz-Klassen verwenden dieselben beiden Methoden.
Eigenschaft |
Erklärung |
---|---|
load |
Importiert eine Feature-Class in das FeatureSet-Objekt. |
save |
Exportiert in eine Geodatabase-Feature-Class oder in ein Shapefile. |
Eigenschaft |
Erklärung |
---|---|
load |
Importiert eine Feature-Class in das RecordSet-Objekt. |
save |
Exportiert in eine Geodatabase-Tabelle oder dBASE-Datei. |
Erstellen und Verwenden von FeatureSet- und RecordSet-Objekten
Sie verfügen über verschiedene Möglichkeiten zum Erstellen von FeatureSet- und RecordSet-Objekten, je nach Anforderungen und Anwendung. Mit der load-Methode können Sie dem Objekt neue Features oder Zeilen hinzufügen. Mit der save-Methode können die Features bzw. Zeilen auf einem Datenträger gespeichert werden. Außerdem kann die Eingabe-Feature-Class oder -Tabelle auch als Argument für die Klasse angegeben werden. Sowohl FeatureSet-Objekte als auch RecordSet-Objekte können zudem direkt als Eingabe für ein Geoverarbeitungswerkzeug dienen.
Erstellen Sie ein leeres Feature-Set.
import arcpy # Create an empty FeatureSet object # featSet = arcpy.FeatureSet()
Erstellen eines Feature-Sets aus einer Eingabe-Feature-Class
import arcpy # Construct a FeatureSet from a feature class # featSet = arcpy.FeatureSet("c:/base/roads.shp")
GetParameterValue-Funktion
Wenn Sie ein Feature-Set oder Recordset mit dem spezifischen Schema einer Werkzeugeingabe erstellen möchten, müssen Sie mit GetParameterValue() ein leeres FeatureSet- bzw. RecordSet-Objekt mit dem entsprechenden Schema erstellen.
import arcpy # Add a custom server toolbox # arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal", "servertools") # Get the default input from a tool # inRecSet = arcpy.GetParameterValue("bufferpoints", 0)
Weitere Informationen zur GetParameterValue-Funktion
Verwenden der GetParameter-Funktion
Beim Arbeiten mit Skriptwerkzeugen können mithilfe der GetParameter-Funktion FeatureSet- und RecordSet-Objekte aus dem Werkzeug abgerufen werden.
import arcpy # Get the RecordSet from a script tool # inRecSet = arcpy.GetParameter(0)
Weitere Informationen zur GetParameter-Funktion
getInput-Methode und getOutput-Methode der Ergebnisklasse
Bei der Arbeit mit einem Serverwerkzeug müssen Sie dessen Ausgabe explizit abfragen. Wenn es sich bei der Ausgabe um ein Feature-Set oder Recordset handelt, kann die Ausgabe des Werkzeugs mithilfe der getOutput()-Methode der Ergebnisklasse in einem FeatureSet- oder RecordSet-Objekt zurückgegeben werden. Ebenso kann ein FeatureSet- oder RecordSet-Eingabeobjekt mit der getInput-Methode des Ergebnisobjekts abgerufen werden.
Weitere Informationen zum Abrufen von Ergebnissen aus einem Geoverarbeitungswerkzeug
import arcpy import time # Add a toolbox from a server # arcpy.ImportToolbox("http://flame7/arcgis/services;GP/BufferByVal", "servertools") # Use GetParameterValue to get a featureset object with the default schema of the # first parameter of the tool 'bufferpoints' # inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0) # Load a shapefile into the featureset # inFeatureSet.load("c:/base/roads.shp") # Run a server tool named BufferPoints with featureset created above # result = arcpy.BufferPoints_servertools(inFeatureSet, "5 feet") # Check the status of the result object every 0.2 seconds until it has a value # of 4 (succeeded) or greater # while result.status < 4: time.sleep(0.2) # Get the output FeatureSet back from the server and save to a local geodatabase # outFeatSet = result.getOutput(0) outFeatSet.save("c:/temp/base.gdb/towers_buffer")
Beispiel: Laden von Daten in ein Feature-Set mithilfe von Cursorn und einer speicherinternen Feature-Class
import arcpy from arcpy import env env.overwriteOutput = True arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal", "server") # List of coordinates # coordinateL = ["-117.196717216;34.046944853","-117.186226483;34.046498438",\ "-117.179530271;34.038016569","-117.187454122;34.039132605",\ "-117.177744614;34.056765964","-117.156205131;34.064466609",\ "-117.145491191;34.068261129","-117.170825195;34.073618099",\ "-117.186784501;34.068149525","-117.158325598;34.03489167"] # Create an in_memory feature class to initially contain the coordinate pairs # fc = arcpy.CreateFeatureClass_management("in_memory", "tempfc", "POINT") # Open an insert cursor # cur = arcpy.InsertCursor(fc) pointArray = arcpy.Array() pnt = arcpy.Point() # Iterate through list of coordinates and add to cursor # for coords in coordinateL: x,y = coords.split(';') pnt.ID = coordinateL.index(coords) + 1 pnt.X = x pnt.Y = y feat = cur.newRow() feat.shape = pnt cur.InsertRow(feat) pointArray.add(pnt) # Delete the cursor del cur # Create a FeatureSet object and load in_memory feature class # featSet = arcpy.FeatureSet() featSet.load(fc) results = arcpy.BufferPoints_servertools(featSet)