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 是正确的格式。)如果您已设置环境,但发现没有对后续工具产生作用的情况,请检查拼写和大小写。

用于处理临时数据的环境设置

scratchGDBscratchFolder 环境是提供保证存在的地理数据库和文件夹位置的只读环境。 这意味着,您可以随时可靠地使用地理数据库或文件夹,而不必进行创建或管理。

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 设置为位于 scratchWorkspace 文件夹的名为 scratch.gdb 的地理数据库。

重置环境

由于地理处理环境对工具操作和输出有着很大的影响,因此需要保证能够追踪环境设置并在必要时将其重置为默认状态。

with 语句中使用,EnvManager 类可用于临时设置一个或多个环境。 退出 with 块时,环境将重置为以前的值。

在以下代码中,cellSizeextent 环境仅在 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")