Utilisation d'objets géométrie avec les outils de géotraitement

Dans de nombreux workflows de géotraitement, vous devez éventuellement exécuter une opération spécifique à l'aide d'informations sur les coordonnées et la géométrie, sans vouloir nécessairement créer une nouvelle classe d'entités (temporaire), la remplir avec des curseurs, l'utiliser, puis la supprimer. Les objets géométrie peuvent alors être utilisés en entrée et en sortie afin de simplifier le géotraitement. Les objets géométrie peuvent être entièrement créés à l'aide des classes Geometry, Multipoint, PointGeometry, Polygon ou Polyline.

Utilisation de géométrie en entrée

L'exemple suivant crée un objet géométrie surfacique à l'aide d'une liste de coordonnées x,y. L'outil Découper permet alors de découper une classe d'entités avec l'objet géométrie surfacique.

import arcpy
# List of coordinates.
coordinates = [
    [2365000, 7355000],
    [2365000, 7455000],
    [2465000, 7455000],
    [2465000, 7355000]]
# Create an array with a point object for each coordinate pair
array = arcpy.Array([arcpy.Point(x, y) for x, y in coordinates])
# Create a polygon geometry object using the array object
boundary = arcpy.Polygon(array, arcpy.SpatialReference(2953))
# Use the geometry to clip an input feature class
arcpy.Clip_analysis('c:/data/rivers.shp', 
                    boundary, 
                    'c:/data/rivers_clipped.shp')

Génération d'objets géométrie en sortie

Les objets géométrie en sortie peuvent être créés en définissant la sortie d'un outil de géotraitement sur un objet géométrie vide. Lors de l'exécution d'un outil en cas de définition sur un objet géométrie vide, l'outil retourne une liste d'objets géométrie. Dans l'exemple suivant, l'outil Copier des entités permet de retourner une liste d'objets géométrie, pouvant ensuite être parcourus par une boucle afin d'accumuler la longueur totale de toutes les entités.

import arcpy
# Run the CopyFeatures tool, setting the output to a geometry object.  
#  geometries is returned as a list of geometry objects.
#  
geometries = arcpy.CopyFeatures_management('c:/temp/outlines.shp', arcpy.Geometry())
# Walk through each geometry, totaling the length
#
length = sum([g.length for g in geometries])
print('Total length: {}'.format(length))