ArcPy — это пакет, который основан (и является преемником) на успешном модуле arcgisscripting. Его целью является создание основы для успешного и продуктивного выполнения анализа географических данных, конвертации данных, управления данными и автоматизации карты в Python.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют быстро создавать как простые, так и сложные рабочие процессы.
Приложения и скрипты ArcGIS написаны с использованием ArcPy, что позволяет получить доступ к многочисленным модулям Python, разработанным пользователями ГИС и программистами, работающими в различных отраслях. Еще одно преимущество использования ArcPy в среде Python состоит в том, что Python является универсальным языком программирования, который легко освоить. Он позволяет работать в режиме интерпретации, что дает возможность быстро моделировать и проверять скрипты в интерактивной среде, а также поддерживает возможность написания больших приложений.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют создавать как простые, так и сложные рабочие процессы. В общих чертах ArcPy состоит из инструментов, функций, классов и модулей.
С технической точки зрения инструменты геообработки представляют собой функции, которые можно вызывать из arcpy, как и любую другую функцию Python. Однако во избежание путаницы между инструментами и отличными от них функциями, такими как, например, утилита ListFeatureClasses(), существуют четкие различия.
- Инструменты документируются иначе, чем функции. У каждого инструмента есть справочная страница в справочной системе ArcGIS Desktop. Функции документируются в документации ArcPy.
- Инструменты, в отличие от функций, возвращают объект Result.
- Инструменты создают сообщения, к которым можно обращаться с помощью многих функций, таких как GetMessages(). Функции не создают сообщений.
- Инструменты лицензируются на уровне продукта (ArcGIS Desktop Basic, Desktop Standard или Desktop Advanced) , или на уровне дополнительного модуля (дополнительные модули ArcGIS Network Analyst extension, ArcGIS Spatial Analyst extension и т.д.). Требуемая лицензия указана на справочной странице инструмента. Функции не требуют лицензирования, они устанавливаются вместе с ArcPy.
Запуск инструмента
В следующем примере показано, как запустить инструмент Буфер (Buffer). Во время работы инструмента по умолчанию в правой части окна Python в разделе справки появляются сообщения.
>>> arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Вот еще один пример запуска инструмента. В этом примере используются инструменты из наборов Управление данными (Data Management) и Конвертация (Conversion). К входному классу объектов, содержащему список улиц, добавляется поле, затем оно вычисляется, а класс объектов загружается в многопользовательскую базу геоданных.
>>> 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 поддерживается различными модулями, включая модуль доступа к данным (arcpy.da), модуль картографии (arcpy.mapping), дополнительный модуль ArcGIS Spatial Analyst extension (arcpy.sa) и дополнительный модуль ArcGIS Network Analyst extension (arcpy.na).
Например, инструменты модуля arcpy.sa используют инструменты набора Spatial Analyst, но настроены на поддержку алгебры карт. Поэтому использование модуля arcpy.sa.Slope аналогично использованию инструмента Уклон (Slope) из набора инструментов Spatial Analyst.