ArcPy – это пакет сайта Python, который обеспечивает успешный и продуктивный анализ географических данных, конвертацию данных, управление данными и автоматизацию карт в Python. Приложения и скрипты ArcGIS написаны с использованием ArcPy, что позволяет получить доступ к многочисленным модулям Python, разработанным пользователями ГИС и программистами, работающими в различных отраслях. Еще одно преимущество использования ArcPy в среде Python состоит в том, что Python является универсальным языком программирования, который легко освоить. Это интерпретируемый язык с динамической типизацией, что дает возможность быстро моделировать и проверять скрипты в интерактивной среде и вместе с тем обеспечивает возможность написания больших приложений.
# Importing arcpy
import arcpy
# Set the workspace environment and run Clip_analysis
arcpy.env.workspace = 'C:/Data/Tongass'
arcpy.Clip_analysis('standb4', 'clipcov', 'standby_clip', 1.25)
После импорта ArcPy вы можете запускать все инструменты геообработки, входящие в состав стандартных наборов инструментов, установленных вместе с ArcGIS.
Импорт модулей
Модуль представляет собой файл Python, содержащий функции и классы. 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)
- Модуль Workflow Manager (Classic) (arcpy.wmx)
Чтобы импортировать модуль целиком, используйте команду импорта модуля import:
# Import only arcpy.mp
import arcpy.mp
Конечно, в Python имеются и другие собственные и сторонние модули. Если вы хотите также работать с модулями ядра Python os и sys, используйте соответствующую строку импорта:
# Import arcpy, os and sys
import arcpy
import os
import sys
Во многих случаях использование всего модуля не требуется. Чтобы импортировать часть модуля, можно использовать выражение from-import. В следующем примере показан импорт класса env (класс env содержит все параметры среды геообработки). Теперь для доступа к параметрам среды вместо arcpy.env можно использовать более простую команду –. env
# Import env from arcpy and set the workspace environment
from arcpy import env
env.workspace = 'c:/data'
Иногда бывает необходимо обратить внимание на идентификацию модуля или части модуля, которые вы использовали, чтобы сделать скрипт более простым для чтения, или потому, что имя, предлагаемое по умолчанию, слишком длинное. В каждом из этих случаев можно использовать форму from-import-as. Как и в предыдущем случае, в следующем примере также выполняется импорт класса env, но ему еще присваивается имя ENV:
# Import env from arcpy as ENV and set the workspace environment
from arcpy import env as ENV
ENV.workspace = 'c:/data'
Таким же образом можно импортировать модуль картографии mapping:
# Import the mapping module from arcpy as MAP and create an ArcGISProject
# object
from arcpy import mp as MAP
aprx = MAP.ArcGISProject('c:/Projects/YosemiteNP/Yosemite.aprx')
Еще один вариант импорта – использование конструкции from-import-*. Содержимое модуля импортируется непосредственно в пространство имен, что позволяет использовать все содержимое напрямую, без указания префикса. Пример:
# Import management from arcpy as *
from arcpy.management import *
Однако, с этим подходом связаны определенные риски. Другие объекты, переменные, модули и т. д. с такими же именами будут перезаписываться, не говоря уже о том, что при работе с большими модулями, пространство имен может переполняться. Можно рассуждать следующим образом: в следующем примере, модули управления (management) и анализа (analysis) импортируются как *. Оба эти модуля содержат инструмент Вырезать. Если вы попытаетесь использовать инструмент Вырезать, какой именно инструмент Вырезать из двух будет использоваться? Правильный ответ – второй инструмент, но этот подход может привести к неопределенности и трудностям при чтении скрипта.
# Import the management and analysis modules from arcpy as *
from arcpy.management import *
from arcpy.analysis import *
# Which Clip is it?
Clip('standb4', 'clipcov', 'standby_clip', 1.25)
Но в некоторых случаях, выражение from-import-* может упростить код, как в случае с модулем sa ArcGIS Spatial Analyst extension. Одно из преимуществ модуля sa состоит в том, что вы можете задать несколько классов и функций в одной строке, чтобы получить выходной растровый объект.
Лицензия:
Для обоих следующих примеров требуется дополнительный модуль ArcGIS Spatial Analyst extension.
# Import arcpy and the sa module as *
import arcpy
from arcpy.sa import *
# Get input parameters
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (Raster(inRaster1) + (Raster(inRaster2) - Raster(inRaster3)))
Теперь сравните этот код со следующим, в котором использовано обычное выражение import-from. Теперь представьте добавление в код нескольких дополнительных классов и функций. Простое добавление sa для каждой функции и класса серьезно влияет на читаемость кода, усложняя его.
# Import arcpy and the sa module
import arcpy
from arcpy import sa
# Get input parameters
inRaster1 = arcpy.GetParameterAsText(0)
inRaster2 = arcpy.GetParameterAsText(1)
inRaster3 = arcpy.GetParameterAsText(2)
outRaster = (sa.Raster(inRaster1) + (sa.Raster(inRaster2) - sa.Raster(inRaster3)))