通过 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.Clip_analysis("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.HillShade_3d("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.Buffer_analysis(inputFC, tempData, "50 METERS")
arcpy.Clip_analysis(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 块时,环境将重置为以前的值。

在以下代码中,像元大小和范围环境仅在 with 语句持续时间内进行设置。

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

此外,可使用 ResetEnvironments 函数恢复默认环境值,或者使用 ClearEnvironment 函数重置特定环境。

import arcpy
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")