将地理处理输出写入内存是将输出写入地理数据库或基于文件的格式的替代方法。 这种方法通常比写入磁盘的格式要快得多。 写入内存的数据是临时数据,在应用程序关闭时会被删除。 内存工作空间是写入 模型构建器 模型或 Python 脚本中间数据的理想位置。
基于内存的工作空间
ArcGIS 提供了两种基于内存的工作空间,可以在其中写入地理处理输出。
内存工作空间
memory 工作空间是基于内存的工作空间,支持输出要素类、表和栅格数据集。
要写入 memory 工作空间,请指定以 memory\ 开头的输出数据集路径,并注意不要包含文件扩展名,例如 memory\tempOutput。
您可以将 memory 数据集添加到 ArcGIS Pro 中的地图。
in_memory 工作空间
旧版本:
in_memory 工作空间是针对 ArcMap 构建的基于内存的旧版工作空间,支持输出要素类、表和栅格数据集。
要写入 in_memory 工作空间,请指定以 in_memory\ 开头的输出数据集路径,并注意不要包含文件扩展名,例如 in_memory\tempOutput。
注:
地理处理工具无法将 in_memory 输出添加至地图。 在创建 in_memory 输出后,工具会将该输出复制到工程地理数据库。 该工具随后会将工程地理数据库的输出添加至地图。 要在地图中显示基于内存的数据,改用内存工作空间。
如果 in_memory 数据集为中间数据集,且未添加到地图,则不会复制到工程地理数据库。
与 memory 工作空间不同,in_memory 工作空间不支持子类型或属性域。
管理内存工作空间
memory 工作空间中的数据只能使用地理处理工具管理,并且不会显示在目录窗格或目录视图中。 要查看地图中哪些图层具有内存数据源,请在内容窗格中单击按数据源列出按钮 ,内存数据源将在 InMemoryDB\GPProMemoryWorkspace 工作空间下列出。
也可以使用 ArcPy 列表函数获取 memory 空间中数据集的列表。
# Set the workspace and list the data saved to memory
arcpy.env.workspace = "memory"
print(f"Memory Feature Classes: {arcpy.ListFeatureClasses()}")
print(f"Memory Rasters: {arcpy.ListRasters()}")
print(f"Memory Tables: {arcpy.ListTables()}")
使用基于内存的工作空间时,尽快删除所有中间数据,以释放系统内存资源。 可以使用删除工具来删除基于内存的工作空间中的数据。 删除单个数据集或整个工作空间以清除工作空间内容。
在 Python 中使用内存工作空间
在 Python 中使用基于内存的工作空间仅对地理处理工具有效。 内存不是可写入文件或其他数据的通用虚拟目录。
按以下代码示例所示使用 memory 工作空间:
import arcpy
# Set the geoprocessing workspace
arcpy.env.workspace = r"C:\Data\Habitat.gdb"
# Buffer a Roads layer, writing output to memory
arcpy.analysis.Buffer("Roads", r"memory\Buffers", 1000)
# Erase the buffers from a Vegetation layer
arcpy.analysis.Erase("Vegetation", r"memory\Buffers", r"memory\Erased")
# Dissolve the memory output of Erase to make a final output in the gdb workspace
arcpy.management.Dissolve(r"memory\Erased", "FinalOutput")
局限性
基于内存的工作空间存在以下限制:
- 基于内存的工作空间不支持地理数据库元素,如要素数据集、要素类、属性规则、条件值、字段组、空间或属性索引、制图表达、拓扑、几何网络以及网络数据集。
- 复制工具不支持来自基于内存的工作空间的输入或输出数据集。 要在内存工作空间中复制数据集,请使用复制要素或导出要素工具。
- 截断表工具不支持来自基于内存的工作空间的输入数据。
- 由于基于内存的工作空间存储在系统的物理内存 (RAM) 中,因此在向工作空间写入大型数据集时,系统在内存上的运行速度可能会变得较慢。 这会对处理性能产生不利影响。
- 无法在基于内存的工作空间中创建文件夹。
- 内存工作空间支持使用更改字段和其他工具进行有限的属性字段和模式修改。 您可以修改字段别名,但不能修改字段名称或其他属性。