Trabajar con conjuntos de entidades y conjuntos de registros
Los objetos de FeatureSet son representaciones ligeras de una clase de entidad. Son elementos de datos especiales que no sólo contienen esquemas (tipo de geometría, campos, referencia espacial) sino también datos, incluida la propia geometría. Los objetos de RecordSet son similares pero se los puede comparar con 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.
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 de FeatureSet y RecordSet tienen estos mismos dos métodos.
Propiedad |
Explicación |
---|---|
load |
Importe una clase de entidad al objeto de FeatureSet. |
save |
Exporte a una clase de entidad de geodatabase o un shapefile. |
Propiedad |
Explicación |
---|---|
load |
Importa 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 de 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 clase de entidad de entrada se puede suministrar como argumento de la clase. Los objetos de 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)
Más información sobre la función GetParameterValue
Utilizar la función GetParameter
Al trabajar con herramientas de secuencia de comandos, los objetos de 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/getOutput de la clase Result
Al utilizar una herramienta del servidor, debe solicitar 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 de FeatureSet o RecordSet. Asimismo, el método getInput del objeto Result se puede utilizar para obtener un objeto de FeatureSet o RecordSet de entrada.
Más información sobre cómo recibir la salida de una herramienta de geoprocesamiento
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.getOutput(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)