В состав 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 (arcpy.sa) и дополнительный модуль ArcGIS Network Analyst (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) импортируются как *. Оба эти модуля содержат инструмент Вырезание (Clip). Если вы попытаетесь использовать инструмент Вырезание (Clip), какой именно инструмент из двух будет использоваться? Правильный ответ – второй инструмент, но этот подход может привести к неопределенности и трудностям при чтении скрипта.
# 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. Одно из преимуществ модуля 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:\python2x\lib, c:\python2x\Lib\site-packages и т. д.)
- Пути, заданные в любом файле .pth, находящимся в 1 и 2
Подробнее см. на веб-сайте http://docs.python.org/install/index.html#modifying-python-s-search-path.
Одновременно с установкой ArcGIS 10.4.1 также устанавливается Python 2.7, если его еще нет на компьютере. При установке в python27\Lib\site-packages также добавляется файл Desktop10.3.pth (или Engine10.3.pth или Server10.3.pth). Это файл содержит две строки, задающие пути к системным папкам arcpy и bin в директории установки ArcGIS. Эти пути необходимы для импорта ArcPy в Python версии 2.7.
При использовании выражения import для импорта модуля Python обращается к переменной системных параметров среды PYTHONPATH, чтобы найти файлы модулей. Эта переменная задается как список папок.