通过 Python 使用环境设置
每个工具都含有一组用于执行操作的参数。其中一些参数在所有工具中通用,如容差或输出位置。这些参数可从所有工具在运行期间使用的地理处理环境中获得默认值。执行某一工具时,当前环境设置也可用作全局输入参数值。诸如感兴趣区域、输出数据集的空间参考以及新栅格数据集的栅格像元大小等设置都可以使用地理处理环境指定。
脚本可通过多种不同方式执行。可在 ArcGIS 应用程序(如 ArcMap)中作为脚本工具运行。也可以通过其他脚本运行或本身在 Python 窗口中运行。当某个脚本在 ArcGIS 应用程序的工具中运行或通过其他地理处理脚本运行时,调用该脚本的应用程序或脚本所使用的环境设置将被传递到该脚本。这些设置将成为工具的脚本执行时所使用的默认设置。被调用的脚本可能会更改传递的设置,但这些更改仅用在该脚本内或由该脚本可能调用的任何其他工具所使用。更改不会传递回调用脚本或应用程序。将环境模型描述为层叠形式最为合适,其中,值向下流向任何使用地理处理环境的过程。
获取和设置环境设置
环境设置以 env 类的属性的方式公开。这些属性可用于检索或设置当前值。每个环境设置都有一个名称和一个标注。标注显示在 ArcGIS 中的环境设置对话框上。名称用在脚本或 ArcGIS 应用程序的命令行中。下面是如何使用环境值的示例:
环境可作为环境类中的读/写属性进行访问,方法为 arcpy.env.<环境名称>。还可以利用 Python 的 from-import 语句简化代码,而不必为每个环境名称都添加 arcpy.env 前缀。这种替代方法的优点是可简化代码并使代码更容易阅读。
导入 arcpy |
|
从 arcpy 中导入 env |
|
示例 1:设置环境值
import arcpy
from arcpy import env
# Set the workspace environment setting
#
env.workspace = "c:/St_Johns/data.gdb"
# Set the XYTolerance environment setting
#
env.XYTolerance = 2.5
# Calculate the default spatial grid index, divide in half, then
# set the spatial grid 1 environment setting
#
result = arcpy.CalculateDefaultGridIndex_management("roads")
env.spatialGrid1 = float(result.getOutput(0)) / 2
# Clip the roads by the urban area feature class
#
arcpy.Clip_analysis("roads","urban_area","urban_roads")
示例 2:获取和设置环境值
import arcpy
from arcpy import env
# Check the current raster cell size and make sure it is a certain size
# for standard output
#
env.workspace = "c:/avalon/data"
if env.cellSize < 10:
env.cellSize = 10
elif env.cellSize > 20:
env.cellSize = 20
arcpy.HillShade_3d("island_dem", "island_shade", 300)
设置环境值时要注意拼写和大小写。将值指定给 arcpy.env.Workspace 与设置 arcpy.env.workspace(注:arcpy.env.workspace 是正确的格式)是不同的。如果您遇到已设置环境,但发现没有对后续工具产生作用的情况,请检查拼写和大小写。
ListEnvironments 函数可用于检查环境名称是否正确。
import arcpy
print arcpy.ListEnvironments()
使用环境设置处理临时数据
临时地理数据库和临时文件夹是提供保证存在的地理数据库和文件夹位置的只读环境。这意味着,您可以随时可靠地使用地理数据库或文件夹,而不必创建或管理一个。
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)
bufferResult = arcpy.Buffer_analysis(inputFC, tempData, "50 METERS")
arcpy.Clip_analysis(clipFC, bufferResult, outputFC)
如何设置临时文件夹环境:
- 如果未设置临时工作空间,临时文件夹会默认为当前用户的临时文件目录。
- 如果临时工作空间引用一个地理数据库,临时文件夹将是包含该地理数据库的文件夹。
- 如果临时工作空间被设置为文件夹,临时文件夹将与临时工作空间相同
如何设置临时文件夹环境:
- 如果未设置临时工作空间,临时地理数据库会默认为当前用户的临时文件目录中一个名为 scratch.gdb 的 gdb。
- 如果 临时工作空间引用一个地理数据库,临时地理数据库将与临时工作空间相同。
- 如果临时工作空间被设置为文件夹,临时地理数据库将被设置为临时工作空间文件夹中一个名为 scratch.gdb 的地理数据库。
重新设置环境
由于地理处理环境对工具操作和输出有着很大的影响,因此需要保证能够追踪环境设置并在必要时将其重置为默认状态。
可使用 ResetEnvironments 函数恢复默认环境值,或者可以使用 ClearEnvironment 函数重置特定环境。
# Reset geoprocessing environment settings
arcpy.ResetEnvironments()
# Reset a specific environment setting
arcpy.ClearEnvironment("workspace")