使用当前工作空间环境和临时工作空间环境
几乎所有的地理处理工具都可将数据集作为输入,从而生成新的数据集。使用地理处理工具时需要注意的是,应避免输入较长的数据集名称,例如:
E:\Data\D052753_a\infrastructure\BK16_c1\approved.gdb\roads\mjrst
输入如此长的数据集名称非常繁琐、麻烦并且容易出错。也正因为如此,地理处理才允许将数据集或图层直接拖动到工具对话框,使用浏览按钮 导航至数据集,或者从下拉列表中选择图层。此外,还有两种功能可使指定输入和输出数据集的操作变得更加容易:当前工作空间和临时工作空间的环境设置。
以下是有关当前工作空间和临时工作空间的要点:
- 当前工作空间和临时工作空间的设置应在地理处理环境 窗口中完成,方法是单击地理处理 > 环境。
- 当前工作空间和临时工作空间的设置与所有地理处理环境一样,与地图文档一同保存。
- 在 ArcMap 中,当前工作空间和临时工作空间将自动设置为默认地理数据库。当前工作空间和临时工作空间随时可更改为该默认地理数据库以外的其他地理数据库。
- 使用工具对话框或在 Python 中执行工具时,您可输入数据集的基本名称,然后工具便可在当前工作空间中找到它。
- 使用工具对话框时,输出数据集名称将按照当前工作空间和临时工作空间的设置自动生成。
设置当前工作空间环境
- 在 ArcMap 中,单击地理处理 > 环境。这将打开环境设置 窗口。
-
展开工作空间类别,然后输入工作空间的路径。下图显示的是将当前工作空间设置为 D:\ArcTutor\BuildingaGeodatabase\Montgomery.gdb\Landbase,这是地理数据库内的一个要素数据集。
您可将当前工作空间设置为系统文件夹、地理数据库或者地理数据库中的要素数据集。
- 单击确定。
还有多种其他的环境设置方法,您可将环境设置为应用于所有工具或者仅执行某个工具、模型、模型过程或脚本。
使用基本名称
当前工作空间蕴含的基本思想是,只设置一次工作空间,然后在键入输入和输出路径时只使用基本名称即可。一个数据集名称由两部分组成,即工作空间和基本名称,如下图所示。
使用基本名称的示例
下图显示的是用作当前工作空间的地理数据库示例。当前工作空间将设置为 D:\BuildingaGeodatabase\Montgomery.gdb\Landbase。
工作空间设置完毕以后,需要使用数据集名称时,仅输入基本名称即可。下例展示的是使用裁剪工具时的情况。
- 基本名称 (Blocks) 与当前工作空间连接在一起便组成了数据集名称 (D:\BuildingaGeodatabase\Montgomery.gdb\Landbase\Blocks)。然后,输入要素参数便替换为该数据集名称。
- 自动生成一个唯一的输出数据集名称。基本名称将表示为,输入基本名称 (Blocks) 追加下划线、工具名称(此例中为“裁剪”)以及数字(如果需要,为确保输入的名称唯一)。
- 如果不想使用自动生成的输出名称,可删除自动生成的名称并自行输入基本名称,该名称还将扩展到数据集名称中,如下所示。
运行工具后,您可能会发现输出并没有写入预期位置,这可能是因为键入输出名称时出错,或者您只是忘记了写入位置。如果发生此类情况,可打开结果 窗口,其中会包含已运行工具及其输入数据集和输出数据集的相应记录。
还可在批处理格网中使用基本名称,如下所示。
在工具对话框中显示工作空间
您可将鼠标指针悬停在浏览按钮 上片刻,随即便会显示您最近一次浏览的工作空间,如下所示。
单击浏览按钮时,“浏览”对话框将在当前工作空间中打开。
脚本中的当前工作空间和基本名称
在 Python 窗口中,工作空间环境可用于设置当前工作空间。设置完工作空间后,便可使用工作空间中任意数据集的基本名称,如下所示。
>> import arcpy
>> arcpy.env.workspace = "c:/projects/RedRiverBasin/data.mdb"
>> arcpy.Intersect_analysis("roads ; streams ", "stream_crossings", "#", 1.5, "point")
以下是一个展示工作空间命令使用过程的 Python 脚本示例:
# Purpose: Determine the type of vegetation within 100 meters of all stream crossings
# Import the ArcPy site-package
import arcpy
try:
# Set the workspace (to avoid having to type in the full path to the data every time)
arcpy.env.workspace = "c:/projects/RedRiverBasin/data.mdb"
# Process: Find all stream crossings (points)
arcpy.Intersect_analysis("roads ; streams ", "stream_crossings", "#", 1.5, "point")
# Process: Buffer all stream crossings by 100 meters
arcpy.Buffer_analysis("stream_crossings","stream_crossings_100m", "100 meters")
# Process: Clip the vegetation feature class to stream_crossings_100m
arcpy.Clip_analysis("vegetation", "stream_crossings_100m", "veg_within_100m_of_crossings")
# Process: Summarize how much (area) of each type of vegetation is found within 100 meters of the stream crossings
arcpy.Statistics_analysis("veg_within_100m_of_crossings", "veg_within_100m_of_crossings_stats","shape_area sum","veg_type")
except:
# If an error occurred while running a tool print the messages
print arcpy.GetMessages()
临时工作空间环境
除当前工作空间外,还存在临时工作空间环境设置。临时工作空间设置的访问方式和设置方式与当前工作空间相同。
临时工作空间环境的主要用途是供“模型构建器”使用。“模型构建器”需要使用一个工作空间来写入中间数据集(模型运行后便不再使用)。尽管它主要服务于“模型构建器”,但有时可能也需要为各工具对话框设置临时工作空间。或者更有可能的是,您设置了在“模型构建器”中使用的临时工作空间,但却忘记在使用某工具的对话框执行该工具前重置临时工作空间。
如果设置了临时工作空间环境,工具将使用它(而非当前工作空间)来自动生成输出数据集名称,如下所示。
如果为输出键入了基本名称,则会使用当前工作空间(而非临时工作空间)来构造数据集名称。
规则就是,只要使用的是基本名称,该名称便会与当前工作空间相连,而不与临时工作空间相连。编写脚本时请注意这一点。在以下代码片段中,输出数据集“stream_crossings”将写入当前工作空间,而非临时工作空间。
arcpy.env.workspace = "c:/projects/RedRiverBasin/data.mdb"
arcpy.env.scratchWorkspace = "c:/projects/Scratch/scratch.gdb"
arcpy.Intersect_analysis("roads ; streams ", "stream_crossings", "#", 1.5, "point")
由于临时工作空间仅用于存放临时数据,因此请不要将它设置为 ArcSDE 地理数据库。因为这可能会导致性能上的问题,即您有可能将临时数据写入到企业级数据库中。建议始终为临时工作空间使用文件地理数据库(而非个人地理数据库或 shapefile 工作空间)。
自动生成的输出数据集名称
所有工具均会为您自动创建输出数据集名称。生成输出名称的逻辑如下所示:
- 如果设置了临时工作空间环境,自动生成的输出路径将是临时工作空间。
- 如果未设置临时工作空间环境,则会检查当前工作空间环境。如果设置了当前工作空间,则自动生成的输出将是当前工作空间。
- 如果既未设置临时工作空间,也未设置当前工作空间,自动生成的输出路径将是某一输入的工作空间。在这种情况下,需要遵循某些特定限制条件。例如,如果工作空间是 coverage 工作空间,并且输出是新的要素类,则输出将是 coverage 工作空间的上级目录中的一个 shapefile 文件。还有其他一些限制条件,例如写入权限。在某些情况下,输出将写入到系统临时目录中。
- 如果为输出数据集键入了基本名称,则无论是否设置了临时工作空间,都将使用当前工作空间构造输出路径。