Utilizar objetos de geometría con herramientas de geoprocesamiento

En muchos flujos de trabajo de geoprocesamiento, puede que necesite ejecutar una operación concreta utilizando información de coordenadas y geometría, pero que no necesariamente desee pasar por el proceso de crear una nueva clase de entidad (temporal), llenar la clase de entidad con cursores, utilizar la clase de entidad y, a continuación, eliminar la clase de entidad temporal. En su lugar, puede utilizar objetos de geometría tanto para la entrada como para la salida con el fin de facilitar el geoprocesamiento. Los objetos de geometría se pueden crear desde cero usando clases Geometry, Multipoint, PointGeometry, Polygon o Polyline.

Utilizar geometría como entrada

En el siguiente ejemplo se crea un objeto de geometría de polígono utilizando una lista de coordenadas x,y. A continuación, se utiliza la herramienta Clip para recortar una clase de entidad con el objeto de geometría de polígono.


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

Generar objetos de geometría

Los objetos de geometría de salida se pueden crear estableciendo el resultado de una herramienta de geoprocesamiento en un objeto de geometría vacío. Cuando se ejecuta una herramienta establecida en un objeto de geometría vacío, la herramienta devuelve una lista de objetos de geometría. En el siguiente ejemplo, se utiliza la herramienta Copy Features para devolver una lista de objetos de geometría, que a continuación se puede recorrer para acumular la longitud total de todas las entidades.


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