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.

RemarqueRemarque :

Les outils 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

Classe FeatureSet

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

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

Pour en savoir plus sur la classe Result

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

# Open an insert cursor
#
cur = arcpy.InsertCursor(fc)
pointArray = arcpy.Array()
pnt = arcpy.Point()

# Iterate through list of coordinates and add to cursor
#
for coords in coordinateL:
    x,y = coords.split(';')

    pnt.ID = coordinateL.index(coords) + 1
    pnt.X = x
    pnt.Y = y

    feat = cur.newRow()
    feat.shape = pnt
    cur.InsertRow(feat)
    pointArray.add(pnt)

# Delete the cursor
del cur

# Create a FeatureSet object and load in_memory feature class
#
featSet = arcpy.FeatureSet()
featSet.load(fc)

results = arcpy.BufferPoints_servertools(featSet)    

Rubriques connexes


7/10/2012