ArcPy – это пакет сайта Python, который обеспечивает успешный и продуктивный анализ географических данных, конвертацию данных, управление данными и автоматизацию карт в Python.
Приложения и скрипты ArcGIS написаны с использованием ArcPy, что позволяет получить доступ к многочисленным модулям Python, разработанным пользователями ГИС и программистами, работающими в различных отраслях. Еще одно преимущество использования ArcPy в среде Python состоит в том, что Python является универсальным языком программирования, который легко освоить. Это интерпретируемый язык с динамической типизацией, что дает возможность быстро моделировать и проверять скрипты в интерактивной среде и вместе с тем обеспечивает возможность написания больших приложений.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют создавать как простые, так и сложные рабочие процессы. В широком смысле ArcPy состоит из инструментов, функций, классов и модулей.
С технической точки зрения инструменты геообработки представляют собой функции из arcpy, т.е., доступ к ним осуществляется так же, как и к любым другим функциям Python. Однако во избежание путаницы между инструментами и отличными от них функциями (такими как служебные функции наподобие ListFeatureClasses()), существуют четкие различия.
- Инструменты документируются не так, как функции. У каждого инструмента есть собственная справочная страница в справочной системе. Функции документируются в документации ArcPy.
- Инструменты, в отличие от функций, возвращают объект Result.
- Инструменты создают сообщения, к которым можно обращаться с помощью многих функций, таких как GetMessages(). Функции не создают сообщений.
Запуск инструмента
В следующем примере показано, как запустить инструмент Буфер. При запуске в окне Python код передается в раздел транскрипции, находящийся в данном окне, вместе с результатом.
arcpy.Buffer_analysis("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Вот еще один пример запуска инструмента. В этом примере используются инструменты из наборов Управление данными и Конвертация. К входному классу объектов, содержащему список улиц, добавляется поле, затем оно вычисляется, а класс объектов загружается в многопользовательскую базу геоданных.
import arcpy
arcpy.AddField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "FLOAT")
arcpy.CalculateField_management("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON3")
arcpy.FeatureClassToFeatureClass_conversion("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
Получение результатов работы инструмента
При выполнении инструмента геообработки результат его работы возвращается в виде объекта Result. Обычно этот объект содержит путь к выходному набору данных, который был создан или обновлен инструментом. В других случаях это могут быть иные значения, например, число или булево значение.
В следующих примерах кода показано, как происходит регистрация возвращенных значений, и какими они могут быть.
Возвращается путь выходного класса пространственных объектов. Результат можно использовать как входные данные для другой функции.
result = arcpy.Buffer_analysis("rivers", "riverBuf", "50 METERS")
# prints C:\Portland\Portland_OR.gdb\riverBuf
print(result)
arcpy.Clip_analysis("streets", result, "streets_50m_of_rivers")
Возвращается количество пространственных объектов.
result = arcpy.GetCount_management("streets_50m_of_rivers")
# prints 54
print(result[0])
Использование параметров среды
Параметры среды геообработки можно рассматривать как дополнительные параметры, которые влияют на результат работы инструмента. Они отличаются от обычных параметров инструментов тем, что они задаются отдельно от инструмента и используются инструментом во время его работы. Параметры среды, например, область интереса, система координат выходного набора данных и размер ячейки нового набора растровых данных, можно задать заранее, и затем они будут использованы во время работы инструмента.
Параметры среды доступны в виде свойств класса env. Эти свойства можно использовать для получения текущих значений параметров среды и для их определения. Ниже приведены примеры того, как использовать значения среды.
Задаются параметры среды рабочей области.
arcpy.env.workspace = "c:/data/Portland.gdb"
arcpy.Buffer_analysis("streets", "streetBuf", "500 METERS")
Задается индекс пространственной решетки для значения, возвращаемого инструментом.
arcpy.env.spatialGrid1 = arcpy.CalculateDefaultSpatialGridIndex_management("streets")[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)
Использование классов
Классы ArcPy, например, SpatialReference и Extent, часто используются в качестве средства быстрого вызова для задания параметров инструментов геообработки, которые иначе пришлось бы задавать в виде сложных строк. Класс подобен архитектурному чертежу. Чертеж обеспечивает структуру для создания чего-либо. Классы могут быть использованы для создания объектов, которые часто называются экземплярами.
import arcpy
spatial_ref = arcpy.SpatialReference("Hawaii Albers Equal Area Conic")
Работа с модулями
ArcPy содержит модули, использующиеся в различных областях ArcGIS. ArcPy поддерживается рядом модулей, в том числе:
- Диаграммы (arcpy.charts)
- Доступ к данным (arcpy.da)
- Геокодирование (arcpy.geocoding)
- Image Analysis (arcpy.ia)
- Картография (arcpy.mp)
- Метаданные (arcpy.metadata)
- Network Analyst (arcpy.nax и arcpy.na)
- Общий доступ (arcpy.sharing)
- Spatial Analyst (arcpy.sa)
- Инженерная сеть (arcpy.un)
- Workflow Manager (arcpy.wmx)
Например, инструменты модулей arcpy.sa и arcpy.ia используют инструменты модуля Spatial Analyst и наборов Image Analyst, но настроены на поддержку Алгебры карт. Поэтому использование arcpy.sa.Slope аналогично использованию инструмента Уклон из набора инструментов модуля Spatial Analyst.