Параметры среды в Python

Для каждого инструмента определен набор параметров, который он использует для выполнения операции. Некоторые из этих параметров являются общими для всех инструментов, например, допуск или выходное местоположение. Эти параметры могут получать свои параметры по умолчанию из среды геообработки, которая используется всеми инструментами во время работы. При работе инструмента текущие параметры среды могут также использоваться как общие значения входных параметров. Такие параметры, как область интереса, пространственная привязка выходного набора данных и размер ячейки нового набора растровых данных, можно задать с помощью сред геообработки.

Скрипт может выполняться несколькими способами. Его можно запустить как инструмент скрипта в приложении ArcGIS. Его также можно запустить из другого скрипта или из самого себя в окне Python. Когда скрипт выполняется в инструменте из приложения ArcGIS или другого скрипта геообработки, параметры среды, используемые вызывающим приложением, передаются ему. Эти параметры становятся параметрами по умолчанию, используемыми скриптом инструмента, когда последний работает. Вызванный скрипт может изменить параметры, переданные ему, но эти изменения используются только в данном скрипте или любом другом инструменте, которого он может вызвать. Изменения не передаются обратно вызывающему скрипту или приложению. Для описания модели среды наилучшим образом подходит определение каскадная, где значения переходят любому процессу, в котором используется среда геообработки.

Получение и задание параметров среды

Параметры среды представлены как свойства в классе arcpy.env. Эти свойства можно применять для получения текущих значений или их установки. К параметрам среды можно получить доступ как к свойствам чтения/записи из класса параметров среды.

import arcpy

arcpy.env.workspace = "c:/data"
Пример 1. Установка значений среды
import arcpy

# Set the workspace environment setting
arcpy.env.workspace = "c:/St_Johns/data.gdb"

# Set the XYTolerance environment setting
arcpy.env.XYTolerance = 2.5

# Calculate the default spatial grid index, divide in half, then
#   set the spatial grid 1 environment setting
grid_index = arcpy.CalculateDefaultGridIndex_management("roads")[0]

arcpy.env.spatialGrid1 = float(grid_index) / 2

# Clip the roads by the urban area feature class
arcpy.analysis.Clip("roads", "urban_area", "urban_roads")
Пример 2. Получение и установка значения среды
import arcpy

# Check the current raster cell size and make sure it is a certain size
#   for standard output
arcpy.env.workspace = "c:/avalon/data"

if arcpy.env.cellSize < 10:
    arcpy.env.cellSize = 10
elif arcpy.env.cellSize > 20:
    arcpy.env.cellSize = 20

arcpy.ddd.HillShade("island_dem", "island_shade", 300)
Внимание:

Написание и регистр имеют значение при установке свойств в Python. Присвоение значения arcpy.env.Workspace — не то же самое, что присвоение arcpy.env.workspace. (Примечание: arcpy.env.workspace - правильный вариант.) Если вы задали параметр среды, но не видите эффекта для последующих инструментов, проверьте синтаксис и регистр символов.

Параметры среды для обработки временных данных

Параметры среды scratchGDB и scratchFolder являются параметрами среды только для чтения, представляющими расположение базы геоданных и папок, которые гарантированно существуют. Это означает, что можно надежно использовать базу геоданных или папку в любое время, без необходимости создания или управления ими.

import arcpy

inputFC = arcpy.GetParameterAsText(0)
clipFC = arcpy.GetParameterAsText(1)
outputFC = arcpy.GetParameterAsText(2)

# Use scratchGDB environment to write intermediate data
tempData = arcpy.CreateScratchName(workspace=arcpy.env.scratchGDB)

result = arcpy.analysis.Buffer(inputFC, tempData, "50 METERS")
arcpy.analysis.Clip(clipFC, result, outputFC)

Параметр среды scratchFolder настроен так:

  • Если scratchWorkspace не настроена, scratchFolder возвращается к текущему каталогу временных файлов пользователя по умолчанию.
  • Если scratchWorkspace ссылается на базу геоданных, scratchFolder будет папкой, содержащей базу геоданных.
  • Если scratchWorkspace указывает на папку, scratchFolder будет совпадать с scratchWorkspace.

Параметр среды scratchGDB настроен так:

  • Если scratchWorkspace не задан, scratchGDB возвращается к базе геоданных scratch.gdb в текущем каталоге временных файлов пользователя.
  • Если scratchWorkspace ссылается на базу геоданных, scratchGDB будет такой же, как и scratchWorkspace.
  • Если scratchWorkspace указывает на папку, scratchGDB будет настроен на базу геоданных с именем scratch.gdb в папке scratchWorkspace.

Сброс параметров среды

Поскольку параметры среды геообработки могут значительно повлиять на производительность инструмента и выходные значения, важно хранить треки настройки среды и сбрасывать параметры среды в случае необходимости к значениям по умолчанию.

При использовании в выражении with, класс EnvManager может применяться для временного задания одного или нескольких параметров среды. Когда вы выходите из блока with, будут возвращены предыдущие значения параметров среды.

В следующем коде параметры cellSize и extent задаются только на время выполнения выражения with.

import arcpy

with arcpy.EnvManager(cellSize=10, extent=arcpy.Extent(-16, 25, 44, 64)):
    # Code to be run with the environments set

Также функцию ResetEnvironments можно использовать для восстановления всех значений параметров среды по умолчанию, а функцию ClearEnvironment - для сброса определенного параметра среды.

import arcpy

# Reset geoprocessing environment settings
arcpy.ResetEnvironments()

# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")