Импорт ArcPy

В состав 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:

Набор инструментов АнализНабор инструментов Картография (Cartography)Набор инструментов КонвертацияНабор инструментов Управление даннымиНабор инструментов РедактированиеНабор инструментов ГеокодированиеНабор инструментов Системы линейных координатНабор инструментов Многомерные данныеНабор инструментов Пространственная статистика

Импорт модулей

Модуль представляет собой файл Python, содержащий функции и классы. ArcPy поддерживается различными модулями, включая модуль доступа к данным (arcpy.da), модуль картографирования (arcpy.mapping), an Дополнительный модуль ArcGIS Spatial Analyst модуль (arcpy.sa) и модуль Дополнительный модуль ArcGIS Network Analyst (arcpy.na).

Чтобы импортировать модуль целиком, используйте импорт модуля:

# 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"

Таким же образом можно импортировать модуль картографии:

# 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 *

Однако, с этим подходом связаны определенные риски. Другие объекты, переменные, модули и т. д. с такими же именами будут перезаписываться, не говоря уже о том, что при работе с большими модулями, пространство имен может переполняться. Можно рассуждать следующим образом: в следующем примере, модули управления и анализа импортируются как *. Оба эти модуля содержат инструмент Вырезать (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 состоит в том, что вы можете задать несколько классов и функций в одной строке, чтобы получить выходной растровый объект.

ЛицензияЛицензия:

Для всех следующих примеров требуется дополнительный модуль Дополнительный модуль ArcGIS Spatial Analyst.

# 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)))

Пути и импорт

При использовании выражения импорта Python выполняет поиск модуля с указанным именем в следующих местоположениях (и в следующем порядке):

  1. Пути задаются системной переменной среды PYTHONPATH
  2. Набор стандартных папок Python (текущая папка, c:\python2x\lib, c:\python2x\Lib\site-packages и т. д.)
  3. Пути, заданные в любом файле .pth, находящимся в 1 и 2

Подробнее см. на веб-странице http://docs.python.org/install/index.html#modifying-python-s-search-path.

Одновременно с установкой ArcGIS 10.1 также устанавливается Python 2.7, если он не установлен ранее. При установке также добавляется файл Desktop10.1.pth (или Engine10.1.pth или Server10.1.pth) в python27\Lib\site-packages. Это файл содержит две строки, задающие пути к системным папкам arcpy и bin в установке ArcGIS. Эти пути необходимы для импорта ArcPy в Python версии 2.7.

При использовании выражения импорта Python обращается к переменной системных параметров среды PYTHONPATH, чтобы найти файлы модулей. Эта переменная задается как список папок.

ПодсказкаПодсказка:

Если при импорте ArcPy появляется одна из следующих ошибок, это означает, что необходимые модули не найдены:

  • ImportError: нет модуля с именем arcpy
  • ImportError: нет модуля с именем arcgisscripting

Чтобы исправить эту ошибку, откройте с помощью Проводника Windows папку python27\Lib\site-packages и добавьте файл Desktop10.1.pth или отредактируйте его. Файл должен содержать две строки, как показано ниже (исправьте системные пути, если они отличаются):

c:\Program Files\ArcGIS\Desktop10.1\arcpy
c:\Program Files\ArcGIS\Desktop10.1\bin

Связанные темы

9/11/2013