Arbeiten mit 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 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.

Hinweis:

Serverwerkzeuge kommunizieren mithilfe von Feature-Sets und Recordsets, d. h., Daten müssen mit diesen Objekten erstellt bzw. in diese Objekte geladen werden, wenn Sie Serverwerkzeuge verwenden.

Die FeatureSet- und RecordSet-Klassen verwenden dieselben beiden Methoden.

EigenschaftErläuterung

load

Importiert eine Feature-Class in das FeatureSet-Objekt.

save

Exportiert in eine Geodatabase-Feature-Class oder in ein Shapefile.

FeatureSetKlasse

EigenschaftErläuterung

load

Importiert eine Tabelle in das RecordSet-Objekt.

save

Exportiert in eine Geodatabase-Tabelle oder dBASE-Datei.

RecordSet-Klasse

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 eines leeren Feature-Sets.

import arcpy

# Create an empty FeatureSet object
feature_set = arcpy.FeatureSet()

Erstellen eines Feature-Sets aus einer Eingabe-Feature-Class.

import arcpy

# Construct a FeatureSet from a feature class
feature_set = arcpy.FeatureSet("c:/base/roads.shp")

GetParameterValueFunktion

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
in_recordset = arcpy.GetParameterValue("bufferpoints", 0)

Verwenden der Funktion GetParameter

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
in_recordset = arcpy.GetParameter(0)

Weitere Informationen zur GetParameter-Funktion

Die getInput- und getOutput-Methode der Result-Klasse.

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 Result-Klasse in einem FeatureSet- oder RecordSet-Objekt zurückgegeben werden. Ebenso kann ein FeatureSet- oder RecordSet-Eingabeobjekt mit der getInput-Methode des Result-Objekts abgerufen werden.

import time
import arcpy

# 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'
in_featureset = arcpy.GetParameterValue("bufferpoints", 0)

# Load a shapefile into the featureset
in_featureset.load("c:/base/roads.shp")

# Run a server tool named BufferPoints with featureset created above
result = arcpy.BufferPoints_servertools(in_featureset, "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
out_featureset = result[0]
out_featureset.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

arcpy.env.overwriteOutput = True

arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal",
                    "servertools")

# List of coordinates
coordinates = [[-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
feature_class = arcpy.CreateFeatureclass_management(
    "in_memory", "tempfc", "POINT")[0]

# Open an insert cursor
with arcpy.da.InsertCursor(feature_class, ["SHAPE@XY"]) as cursor:
    # Iterate through list of coordinates and add to cursor
    for (x, y) in coordinates:
        cursor.insertRow([(x, y)])

# Create a FeatureSet object and load in_memory feature class
feature_set = arcpy.FeatureSet()
feature_set.load(feature_class)

results = arcpy.BufferPoints_servertools(feature_set)