Los objetos FeatureSet son representaciones ligeras de una clase de entidad. Son elementos de datos especiales que no solo contienen esquemas (tipo de geometría, campos, referencia espacial) sino también datos, incluida la geometría. Los objetos RecordSet son similares, pero comparables a una tabla. Cuando se utilizan en una herramienta de secuencia de comandos, los conjuntos de entidades y los conjuntos de registros se pueden utilizar para definir entidades y registros interactivamente.
Nota:
Las herramientas de servidor se comunican mediante conjuntos de entidades y conjuntos de registros, lo que significa que los datos se deben crear con estos objetos o cargados en ellos al utilizar las herramientas del servidor.
Las clases FeatureSet y RecordSet tienen los dos mismos métodos.
Propiedad | Explicación |
---|---|
load | Importe una clase de entidad en el objeto FeatureSet. |
save | Exporte a una clase de entidad de geodatabase o un shapefile. |
Propiedad | Explicación |
---|---|
load | Importe una tabla en el objeto RecordSet. |
save | Exporte a una tabla de geodatabase o un archivo dBASE. |
Crear y utilizar objetos de FeatureSet y RecordSet
Los objetos FeatureSet y RecordSet se pueden crear de diversas maneras según la necesidad y la aplicación. El método load se puede utilizar para agregar nuevas entidades o filas al objeto y el método save para conservar las entidades o filas en el disco. Además, la tabla o la clase de entidad de entrada se puede suministrar como argumento para la clase. Los objetos FeatureSet y RecordSet también se pueden utilizar directamente como entrada de una herramienta de geoprocesamiento.
Cree un conjunto de entidades vacío.
import arcpy
# Create an empty FeatureSet object
feature_set = arcpy.FeatureSet()
Construir un conjunto de entidades a partir de una clase de entidad de entrada.
import arcpy
# Construct a FeatureSet from a feature class
feature_set = arcpy.FeatureSet("c:/base/roads.shp")
Función GetParameterValue
Si desea crear un conjunto de entidades o un conjunto de registros con el esquema específico de la entrada de una herramienta, utilice GetParameterValue() para crear un objeto FeatureSet o RecordSet vacío con el esquema adecuado.
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)
Usar la función GetParameter
Al trabajar con herramientas de secuencia de comandos, los objetos FeatureSet y RecordSet se pueden adquirir desde la herramienta mediante la función GetParameter().
import arcpy
# Get the RecordSet from a script tool
in_recordset = arcpy.GetParameter(0)
Métodos getInput y getOutput de la clase Result
Al utilizar una herramienta del servidor, debe pedir explícitamente su salida. Cuando la salida es un conjunto de entidades o un conjunto de registros, el método getOutput() de la clase Result se puede utilizar para devolver la salida de la herramienta en un objeto FeatureSet o RecordSet. Además, se puede usar el método getInput del objeto Result para obtener un objeto FeatureSet o RecordSet de entrada.
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")
Ejemplo: cargar datos en un conjunto de entidades utilizando cursores y una clase de entidad en memoria
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)