Utilisation des jeux d'entités et des jeux d'enregistrements

Les objets FeatureSet sont des représentations allégées d'une classe d'entités. Il s'agit d'un élément de données spécial qui contient non seulement la structure (type de géométrie, champs, référence spatiale) mais également les données, y compris la géométrie elle-même. Les objets RecordSet sont similaires, mais comparables à une table. Lorsqu'ils sont utilisés dans un outil de script, les jeux d'entités et les jeux d'enregistrements peuvent être utilisés pour définir de manière interactive les entités et les enregistrements.

Remarque :

Les outils de serveur communiquent à l'aide de jeux d'entités et de jeux d'enregistrements, ce qui signifie que les données doivent être créées à l'aide de ces objets ou chargées dans ces objets lors de l'utilisation d'outils de serveur.

Les classes FeatureSet et RecordSet disposent des deux mêmes méthodes.

PropriétéExplication

load

Importez une classe d'entités dans l'objet FeatureSet.

save

Exporte vers une classe d'entités de géodatabase ou un fichier de formes

FeatureSetclasse

PropriétéExplication

load

Importez une table dans l'objet RecordSet.

save

Exporte vers une table de géodatabase ou un fichier dBase

Classe RecordSet

Création et utilisation des objets FeatureSet et RecordSet

Les objets FeatureSet et RecordSet peuvent être créés de différentes manières selon le besoin et l'application. La méthode load permet d'ajouter de nouvelles entités ou lignes à l'objet et la méthode save permet de conserver les entités ou lignes sur le disque. De plus, la classe d'entités ou la table en entrée peut également être fournie en tant qu'argument à la classe. Les objets FeatureSet et RecordSet peuvent également être utilisés directement comme entrée d'un outil de géotraitement.

Création d'un jeu d'entités vide.

import arcpy

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

Construction d'un jeu d'entités à partir d'une classe d'entités en entrée.

import arcpy

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

Fonction GetParameterValue

Si vous souhaitez créer un jeu d'entités ou un jeu d'enregistrements avec la structure spécifique de l'entrée d'un outil, utilisez GetParameterValue() pour créer un objet FeatureSet ou RecordSet vide avec la structure appropriée.

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)

Utilisation de la fonction GetParameter

Lors de l'utilisation d'outils de script, les objets FeatureSet et RecordSet peuvent être acquis à partir de l'outil à l'aide de la fonction GetParameter().

import arcpy

# Get the RecordSet from a script tool
in_recordset = arcpy.GetParameter(0)

Pour en savoir plus sur la fonction GetParameter

Les méthodes getInput et getOutput de la classe Result

Quand vous utilisez un outil de serveur, demandez explicitement sa sortie. Lorsque la sortie est un jeu d'entités ou un jeu d'enregistrements, la méthode getOutput() de la classe Result peut être utilisée pour renvoyer la sortie de l'outil dans un objet FeatureSet ou RecordSet. De même, la méthode getInput de l'objet Result peut être utilisée pour obtenir un objet FeatureSet ou RecordSet en entrée.

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")

Exemple : chargement de données vers un jeu d'entités à l'aide de curseurs et d'une classe d'entités en mémoire

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)