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.
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 |
Importe 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 |
Propriété |
Explication |
---|---|
load |
Importe une classe d'entités dans l'objet RecordSet |
save |
Exporte vers une table de géodatabase ou un fichier dBase |
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
#
featSet = 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
#
featSet = 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
#
inRecSet = arcpy.GetParameterValue("bufferpoints", 0)
Pour en savoir plus sur la fonction GetParameterValue
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
#
inRecSet = arcpy.GetParameter(0)
Pour en savoir plus sur la fonction GetParameter
Méthodes getInput/getOutput de la classe Result
Quand vous utilisez un outil de serveur, vous devez demander 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.
Pour en savoir plus sur l'obtention de résultats à partir d'un outil de géotraitement
import arcpy
import time
# 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'
#
inFeatureSet = arcpy.GetParameterValue("bufferpoints", 0)
# Load a shapefile into the featureset
#
inFeatureSet.load("c:/base/roads.shp")
# Run a server tool named BufferPoints with featureset created above
#
result = arcpy.BufferPoints_servertools(inFeatureSet, "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
#
outFeatSet = result.getOutput(0)
outFeatSet.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
from arcpy import env
env.overwriteOutput = True
arcpy.ImportToolbox("http://flame7/arcgis/services;BufferByVal", "server")
# List of coordinates
#
coordinateL = [[-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
#
fc = arcpy.CreateFeatureclass_management("in_memory",
"tempfc",
"POINT").getOutput(0)
# Open an insert cursor
#
with arcpy.da.InsertCursor(fc, ["SHAPE@XY"]) as cursor:
# Iterate through list of coordinates and add to cursor
#
for (x, y) in coordinateL:
cursor.insertRow([(x, y)])
# Create a FeatureSet object and load in_memory feature class
#
featSet = arcpy.FeatureSet()
featSet.load(fc)
results = arcpy.BufferPoints_servertools(featSet)