通过 Python 使用环境设置

每个工具都含有一组用于执行操作的参数。其中一些参数在所有工具中通用,如容差或输出位置。这些参数可从所有工具在运行期间使用的地理处理环境中获得默认值。执行某一工具时,当前环境设置也可用作全局输入参数值。诸如感兴趣区域、输出数据集的空间参考以及新栅格数据集的栅格单元大小等设置都可以使用地理处理环境指定。

脚本可通过多种不同方式执行。可在 ArcGIS 应用程序(如 ArcMap)中作为脚本工具运行。也可以通过其他脚本运行或本身在 Python 窗口中运行。当某个脚本在 ArcGIS 应用程序的工具中运行或通过其他地理处理脚本运行时,调用该脚本的应用程序或脚本所使用的环境设置将被传递到该脚本。这些设置将成为工具的脚本执行时所使用的默认设置。被调用的脚本可能会更改传递的设置,但这些更改仅用在该脚本内或由该脚本可能调用的任何其他工具所使用。更改不会传递回调用脚本或应用程序。将环境模型描述为层叠形式最为合适,其中,值向下流向任何使用地理处理环境的过程。

获取和设置环境设置

环境设置以 env 类的属性的方式公开。这些属性可用于检索或设置当前值。每个环境设置都有一个名称和一个标注。标注显示在 ArcGIS 中的环境设置对话框上。名称用在脚本或 ArcGIS 应用程序的命令行中。下面是如何使用环境值的示例:

注注:

环境可作为环境类中的读/写属性进行访问,方法为 arcpy.env.<环境名称>。还可以利用 Python 的 from-import 语句简化代码,而不必为每个环境名称都添加 arcpy.env 前缀。这种替代方法的优点是可简化代码并使代码更容易阅读。

import arcpy

from arcpy import env

import arcpy  arcpy.env.workspace = "c:/data"
import arcpy from arcpy import env  env.workspace = "c:/data"

示例 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()

保存和加载设置

仅当由地理处理工具执行脚本时,设置才能自动传送。当某个地理处理脚本调用另一个地理处理脚本时,环境不会自动传递到被调用的脚本,因为第一个脚本无法知道第二个脚本是否正在使用 ArcPy。

为了便于将环境设置从一个脚本传送到另一个脚本,以及将一个会话的设置保存到下一个会话,可将设置保存到文件中。ArcPy 随后可通过加载设置文件来设置其环境。在下面的第一个示例中,脚本将其设置保存到文件并将该文件名作为参数传递到第二个脚本,从而将设置传送到第二个脚本。第二个示例使用作为脚本参数传递的文件名来加载环境设置文件。

示例 1:

 # Import ArcPy site-package # import arcpy from arcpy import env import os  # Set the raster environment settings and the workspace # env.cellSize = 25 env.mask = "D:/St_Johns/Landcover" env.workspace = "D:/St_Johns"  # Save the environment settings # envfile = arcpy.SaveSettings("c:/St_Johns/settings")  # Call Python script and pass file name as argument # os.system('MyHillshade.py ' + envfile)

示例 2:

 # Import ArcPy site-package # import arcpy  # Get the input parameter value # envfile = arcpy.GetParameterAsText(0)  # Load the environment settings # arcpy.LoadSettings(envfile)  # Calculate hillshade # arcpy.Hillshade_3d("city_dem","city_shade",250)

环境值可在模块之间以参数的形式传递。在正在执行的模块之间保存和加载设置不是共享值的有效方式。对于多个没有同时运行的模块,使用设置文件是有效的,即上面示例的意图。

相关主题


7/10/2012