ArcPy – это пакет сайта Python, который обеспечивает успешный и продуктивный анализ географических данных, конвертацию данных, управление данными и автоматизацию карт в Python.
При использовании приложений и скриптов ArcGIS, написанных с помощью ArcPy, можно получить доступ и работать с различными модулями Python, разработанными ГИС-специалистами и программистами из самых разных областей знаний. Преимущество использования ArcPy в среде Python состоит в том, что Python является универсальным языком программирования, который легко освоить. Это интерпретируемый язык с динамической типизацией, что позволяет быстро моделировать и проверять скрипты в интерактивной среде и вместе с тем обеспечивает возможность написания больших приложений.
ArcPy обеспечивает доступ к инструментам геообработки, а также к дополнительным функциям, классам и модулям, которые позволяют создавать как простые, так и сложные рабочие процессы. ArcPy содержится в инструментах, функциях, классах и модулях.
Инструменты геообработки представляют собой функции, доступные из arcpy, т.е., доступ к ним осуществляется так же, как и к любым другим функциям Python. Однако во избежание путаницы между инструментами и отличными от них функциями (например, служебные функции ListFeatureClasses()), существуют четкие различия.
- Инструменты документируются не так, как функции. У каждого инструмента есть справочная страница в справочной системе. Функции документируются в документации ArcPy.
- Инструменты, в отличие от функций, возвращают объект Result.
- Инструменты создают сообщения, к которым можно обращаться с помощью многих функций, таких как GetMessages(). Функции не создают сообщений.
Использование инструмента
Для примера, ниже показано, как запустить инструмент Буфер. При запуске в окне Python код передается в раздел транскрипции, находящийся в данном окне, вместе с результатом.
arcpy.analysis.Buffer("c:/data/Portland.gdb/streets", "c:/data/Portland.gdb/steets_buffer", "500 METERS")
Ниже приведен еще один пример запуска инструментов. Он использует инструменты из наборов инструментов управления данными и конвертации. К входному классу пространственных объектов, содержащему список улиц, добавляется поле, оно вычисляется, а класс пространственных объектов загружается в многопользовательскую базу геоданных.
import arcpy
arcpy.management.AddField("c:/data/Portland.gdb/streets", "LENGTH_MILES", "FLOAT")
arcpy.management.CalculateField("c:/data/Portland.gdb/streets", "LENGTH_MILES", "!shape.length@miles!", "PYTHON3")
arcpy.conversion.FeatureClassToFeatureClass("c:/data/Portland.gdb/streets", "Database Connections/MySDE.sde/PortlandDataset", "streets")
Результаты инструмента
При выполнении инструмента геообработки результат его работы возвращается в виде объекта Result. Обычно этот объект содержит путь к выходному набору данных, который был создан или обновлен инструментом. В других случаях это могут быть дополнительные значения, например, число или булево значение.
В следующих примерах кода показано, как фиксируются возвращаемые значения и какими могут быть их значения:
Возвращается путь выходного класса пространственных объектов. Результат можно использовать как входные данные для другой функции.
result = arcpy.analysis.Buffer("rivers", "riverBuf", "50 METERS")
# Prints C:\Portland\Portland_OR.gdb\riverBuf
print(result)
arcpy.analysis.Clip("streets", result, "streets_50m_of_rivers")
Возвращается количество пространственных объектов.
result = arcpy.management.GetCount("streets_50m_of_rivers")
# Prints 54
print(result[0])
Параметры среды
Параметры среды геообработки можно рассматривать как дополнительные параметры, которые влияют на результат работы инструмента. Они отличаются от обычных параметров инструмента тем, что они задаются отдельно от инструмента и используются инструментами во время их работы. Параметры среды, например, область интереса, система координат выходного набора данных и размер ячейки нового набора растровых данных, можно задать заранее, и затем они будут использованы во время работы инструмента.
Параметры среды доступны в виде свойств класса env. Эти свойства можно использовать для получения текущих значений параметров среды и для их определения. Далее приведены примеры того, как использовать значения среды:
Задаются параметры среды рабочей области.
arcpy.env.workspace = "c:/data/Portland.gdb"
arcpy.analysis.Buffer("streets", "streetBuf", "500 METERS")
Возвращаются текущие настройки размера ячейки растра и проверяется, используется ли это значение в качестве выходного.
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)
- Анализ изображений (arcpy.ia)
- Картография (arcpy.mp)
- Метаданные (arcpy.metadata)
- Network Analyst (arcpy.nax и arcpy.na)
- Общий доступ (arcpy.sharing)
- Spatial Analyst (arcpy.sa)
- Инженерная сеть (arcpy.un)
Например, инструменты модулей arcpy.sa и arcpy.ia используют инструменты из наборов инструментов Spatial Analyst и Image Analyst, но настроены на поддержку Алгебры карт. Например, запуск arcpy.sa.Slope аналогичен запуску инструмента Уклон из набора инструментов Spatial Analyst.