В состав ArcGIS 10 вошел новый компонент – ArcPy, который представляет собой пакет Python, обслуживающий и расширяющий возможности модуля arcgisscripting, использовавшегося в версии ArcGIS 9.2. ArcPy предоставляет удобную и динамичную среду разработки скриптов 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.da), модуль картографии (arcpy.mapping), дополнительный модуль ArcGIS Spatial Analyst extension (arcpy.sa) и дополнительный модуль ArcGIS Network Analyst extension (arcpy.na).
Чтобы импортировать модуль целиком, используйте команду импорта модуля import:
# Import only arcpy.mapping
import arcpy.mapping
Конечно, в 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 a MapDocument
# object
from arcpy import mapping as MAP
mxd = MAP.MapDocument('C:/maps/basemap.mxd')
Еще один вариант импорта – использование формы 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-* может упростить код, как в случае с ArcGIS Spatial Analyst extension и его модулем sa. Одно из преимуществ модуля sa состоит в том, что вы можете задать несколько классов и функций в одной строке, чтобы получить выходной растровый объект.
# Import arcpy and the sa module as *
import arcpy
from arcpy.sa import *
arcpy.CheckOutExtension('spatial')
# 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
arcpy.CheckOutExtension('spatial')
# 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)))
Пути и импорт
При использовании выражения import для импорта модуля Python выполняет поиск модуля с указанным именем в следующих местоположениях (и в следующем порядке):
- Пути, заданные системной переменной среды PYTHONPATH
- Набор стандартных папок Python (текущая папка, c:\python27\lib, c:\python27\Lib\site-packages и т. д.)
- Пути, заданные в любом файле .pth, находящимся в 1 и 2
Подробнее см. на веб-сайте https://docs.python.org/install/index.html#modifying-python-s-search-path.
Одновременно с установкой ArcGIS 10.8.2 также устанавливается Python 2.7, если его еще нет на компьютере. Установка также добавит файл Desktop10.8.pth (или Engineer10.8.pth или Server10.8.pth) в python27\Lib\site-packages. Это файл содержит две строки, задающие пути к системным папкам arcpy и bin в директории установки ArcGIS. Эти пути необходимы для импорта ArcPy в Python версии 2.7.
При использовании выражения import для импорта модуля Python обращается к переменной системных параметров среды PYTHONPATH, чтобы найти файлы модулей. Эта переменная задается как список папок.