Краткий обзор ArcPy
ArcPy — это пакет, который основан (и является преемником) на успешном модуле arcgisscripting. Его целью является создание основы для успешного и продуктивного выполнения анализа географических данных, конвертации данных, управления данными и автоматизации карты в Python.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют быстро создавать как простые, так и сложные рабочие процессы.
Приложения и скрипты ArcGIS написаны с использованием ArcPy, что позволяет получить доступ к многочисленным модулям Python, разработанным пользователями ГИС и программистами, работающими в различных отраслях. Еще одно преимущество использования ArcPy в среде Python состоит в том, что Python является универсальным языком программирования, который легко освоить. Он позволяет работать в режиме интерпретации, что дает возможность быстро моделировать и проверять скрипты в интерактивной среде, а также поддерживает возможность написания больших приложений.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют создавать как простые, так и сложные рабочие процессы. В общих чертах ArcPy состоит из инструментов, функций, классов и модулей.
С технической точки зрения инструменты геообработки представляют собой функции, которые можно вызывать из arcpy, как и любую другую "родную" функцию этого модуля. Однако во избежание путаницы между инструментами и отличными от них функциями, такими как утилита ListFeatureClasses(), существуют четкие различия.
- Инструменты документируются иначе, чем функции. У каждого инструмента есть справочная страница в справочной системе ArcGIS Desktop. Функции документируются в документации ArcPy.
- Инструменты в отличие от функций возвращают объект result.
- Инструменты создают сообщения, к которым можно обращаться с помощью многих функций, таких как GetMessages(). Функции не создают сообщений.
- Инструменты лицензируются на уровне продукта (ArcGIS for Desktop Basic, Standard или Advanced) или на уровне дополнительного модуля (Дополнительный модуль ArcGIS Network Analyst, Дополнительный модуль ArcGIS Spatial Analyst и т. д.). Требуемая лицензия указана на справочной странице инструмента. Функции не требуют лицензирования, они устанавливаются вместе с ArcPy.
Запуск инструмента
В следующем примере показано, как запустить инструмент Буфер (Buffer). Во время работы инструмента по умолчанию в правой части окна Python в разделе справки появляются сообщения.
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Вот еще один пример запуска инструмента. В этом примере используются инструменты из наборов Управление данными (Data Management) и Конвертация (Conversion). К входному классу объектов, содержащему список улиц, добавляется поле, затем оно вычисляется, а класс объектов загружается в базу геоданных ArcSDE.
>>> import arcpy
>>> arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "TEXT")
>>> arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON_9.3")
>>> arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
Получение результатов работы инструмента
При выполнении инструмента геообработки результат его работы возвращается в виде объекта result. Обычно это путь к выходному набору данных, который был создан или обновлен с помощью инструмента. В других случаях это могут быть иные типы значений, такие как число или булево значение. Если выходные данные являются многозначным параметром, значения могут быть возвращены как список в списке.
В следующих примерах кода показано, как захватываются возвращенные значения и какими они могут быть.
Возвращается путь выходного класса пространственных объектов. Результат можно использовать как входные данные для другой функции.
>>> result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
>>> print result
C:\Portland\Portland_OR.gdb\riverBuf
>>> arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
Возвращается количество пространственных объектов.
>>> result = arcpy.GetCount_management("streets_50m_of_rivers")
>>> print result.getOutput(0)
54
Возвращается список индексов пространственной сетки по умолчанию для класса пространственных объектов.
>>> result = arcpy.CalculateDefaultGridIndex_management("streets_50m_of_rivers")
>>> for i in range(0, result.outputCount):
... print result.getOutput(i)
...
560
200
0
Использование параметров среды
Параметры среды геообработки можно рассматривать как дополнительные параметры, которые влияют на результат работы инструмента. Они отличаются от обычных параметров инструментов тем, что они задаются отдельно от инструмента и используются инструментом во время его работы. Такие параметры среды, как область интереса, система координат выходного набора данных и размер ячейки нового набора растровых данных, можно задать заранее, затем они будут использованы во время работы инструмента.
Параметры среды доступны в виде свойств класса env. Эти свойства можно использовать для получения текущих значений параметров среды и для их задания. Ниже приведены примеры использования значений параметров среды.
Задаются параметры среды рабочей области.
>>> arcpy.env.workspace = "c:/data/Portland.gdb"
>>> arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
Задается индекс пространственной сетки для значения, возвращаемого инструментом.
>>> arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets").getOutput(0)
Возвращаются текущие настройки размера ячейки растра и проверяется, используется ли это значение в качестве выходного.
if arcpy.env.cellSize != 30:
arcpy.env.cellSize = 30
Использование функций
Функция – это часть приложения, выполняющая определенную задачу. Функция может включаться в более крупную программу. Помимо инструментов ArcPy содержит большое количество функций для улучшения поддержки процесса геообработки. Функции можно использовать для создания списков определенных наборов данных, получения свойств наборов данных, проверки наличия данных, проверки имен таблиц перед добавлением их в базу геоданных или для выполнения множества других задач, решаемых при помощи скриптов.
В следующем примере кода показано получение свойств данных и проверка дополнительного модуля.
import arcpy
# prints True
print arcpy.Exists("c:/data/Portland.gdb/streets")
# prints NAD_1983_StatePlane_Oregon_North_FIPS_3601_Feet
sr = arcpy.Describe("c:/data/Portland.gdb/streets").spatialReference
print sr.name
# prints Available
print arcpy.CheckExtension("spatial")
arcpy.CheckOutExtension("spatial")
Использование классов
Такие классы ArcPy, как SpatialReference и Extent, часто используются в качества быстрого доступа для задания параметров для инструментов геообработки, которые иначе пришлось бы задавать в виде сложных строк. Класс является аналогом архитектурного проекта. Этот проект формирует среду, позволяющую проектировать элементы. Классы могут использоваться для создания объектов, часто называемых экземплярами.
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
Работа с модулями
ArcPy содержит модули, использующиеся в различных областях ArcGIS. ArcPy поддерживается различными модулями, в числе которых модуль доступа к данным (data access) (arcpy.da) модуль картографирования (mapping) (arcpy.mapping), дополнительный модуль Дополнительный модуль ArcGIS Spatial Analyst(arcpy.sa) и дополнительный модуль Дополнительный модуль ArcGIS Network Analyst(arcpy.na).
Например, инструменты модуля arcpy.sa используют инструменты набора Spatial Analyst, но настроены на поддержку алгебры карт. Поэтому использование arcpy.sa.Slope аналогично использованию инструмента Slope из набора инструментов Spatial Analyst.