Trabajar con conjuntos de entidades y conjuntos de registros

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.

PropiedadExplicación

load

Importe una clase de entidad en el objeto FeatureSet.

save

Exporte a una clase de entidad de geodatabase o un shapefile.

Clase FeatureSet

PropiedadExplicación

load

Importe una tabla en el objeto RecordSet.

save

Exporte a una tabla de geodatabase o un archivo dBASE.

Clase de RecordSet

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ás información sobre la función GetParameter

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)