Использование объектов геометрии с инструментами геообработки

Во многих рабочих процессах геообработки может потребоваться запустить определенную операцию, используя информацию о координатах и геометрии, при этом не желая проходить процесс создания нового (временного) класса пространственных объектов, отображения класса пространственных объектов с помощью курсоров, использования класса пространственных объектов, и последующего удаления временного класса пространственных объектов. Чтобы упростить геообработку, вместо этого в качестве входных и выходных данных можно использовать объекты геометрии. Объекты геометрии могут создаваться сначала, используя классы Geometry, Multipoint, PointGeometry, Polygon, или Polyline.

Использование геометрии в качестве входных данных

Следующий пример иллюстрирует использование объекта геометрии полигона в качестве списка координат x,y. Затем используется инструмент Вырезание, чтобы вырезать класс пространственных объектов с объектом геометрии полигона.


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

Вывод объектов геометрии

Выходной объект геометрии можно создать, задав в качестве выхода инструмента геообработки пустой объект геометрии. При запуске инструмента с назначением пустого объекта геометрии инструмент возвращает список объектов геометрии. В следующем примере инструмент Копировать объекты используется, чтобы вернуть список объектов геометрии, которые можно затем зациклить, чтобы накопить общую длину всех объектов.


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