in_memory
工作区。我找到的关于该主题的最佳资源来自ESRI的“使用内存中的工作空间”。不幸的是,帮助部分不是很有帮助。另外,此网站上有一篇帖子,简要介绍了此处和此处的主题。 我的具体问题:
在基于ArcGIS / arcpy的脚本中使用
in_memory
工作区的正确用法和语法是什么?in_memory
工作区是否与例如使用arcpy.MakeFeatureLayer_management()
创建层相同?是否存在诸如在脚本末尾删除
in_memory
工作区之类的标准? /> #1 楼
我最近一直在使用“ in_memory”。它很有用,因为它有可能极大地提高某些任务的处理速度,但是,如果您使用非常大的数据集,则可能会导致程序崩溃。您可以使用“ in_memory”来定义过程输出...通常,如果我要对要素类执行任务,我会首先将其复制到“ in_memory”工作空间中:
inFeature = r'C:\myDir.gdb\myFeature'
memoryFeature = "in_memory" + "\" + "myMemoryFeature"
arcpy.CopyFeatures_management(inFeature, memoryFeature)
请注意,您不必像我一样将memoryFeature并置在一起,您可以将其写为“ in_memory \ myMemoryFeature”,我喜欢这样做以切换回轻松在“ in_memory”和物理目录之间来回切换。然后,您可以对内存中的功能执行处理。完成后,您可以撤消该过程以将其保存回目录。
我可能是错的,但是我认为这与创建要素图层不同。要素图层可让您访问选择方法和其他图层特定的操作。将“ in_memory”目录视为等效于栅格对象的向量(raster = arcpy.Raster(myRasterLocation))
要在使用“ in_memory”后进行清理,只需添加以下代码: br />
arcpy.Delete_management("in_memory")
希望有帮助。
#2 楼
没有很多东西。您可以在地理处理工具和名为in_memory
的arcpy游标中访问一个魔术目录。您可以执行arcpy.management.CreateTable('in_memory', 'my_new_table')
或CreateFeatureClass
之类的操作来制作新的要素类或表。然后,您将在该过程中创建一个新表,其路径为in_memory\my_new_table
,如果您在arcmap中,它将向目录my_new_table
添加一个表视图,您可以将其用作获取该表的快捷方式。如果它是内存表中的临时表,请在脚本末尾使用arcpy.management.Delete(r'in_memory\my_new_table')
。#3 楼
稍微偏离主题,但我认为值得指出。首先,我同意上面的@JasonScheirer和@egdetti,in_memory
可能非常有用。需要注意的最大事情是in_memory
工作空间不支持栅格数据。如果这成为问题,我建议使用Python tempfile
模块。这不会那么快,但是更可靠。例如,您可以执行以下操作: import arcpy
import tempfile
import os.path
import shutil
try:
temp_dir = tempfile.mkdtemp()
temp_gdb = "temp.gdb"
arcpy.CreateFileGDB_management(temp_dir, temp_gdb)
arcpy.env.workspace = os.path.join(temp_dir, temp_gdb)
#Some processing...
except Exception, e:
#handle exceptions here
print e
finally:
shutil.rmtree(temp_dir, True)
评论
arcpy有一种方法可以处理用arcpy.Raster()方法内置的栅格。通过定义诸如myRaster = arcpy.Raster(“ C:\ RasteLocation”)的变量,您可以在内存中创建一个栅格对象,该对象可以轻松用于地图代数计算和各种其他栅格操作。保存这样的栅格对象就像在myRaster.save(“ C:\ SaveLocation”)中编写一样简单。 arcpy带来了一个非常有用的功能。
– bluefoot
2012年10月11日,0:24
@egdetti公平电话。我很好奇,但是它如何处理更大的数据集。
–om_henners
2012年10月11日,0:56
@mbenedetti-Raster对象尽可能早地将栅格写入arcpy临时工作区,这允许arcpy通过将单单元处理工具(例如“ +”之类)堆叠到单个执行过程中来优化I / O。 , 例如。 save()方法将强制执行栅格处理。
–科蒂斯价格
13年4月2日,0:46
@om_henners in_memory支持ArcGIS 10.1中的栅格!
–科蒂斯价格
13年4月2日,0:47
@om_henners arcpy提供了一个用于创建临时名称的工具,该工具的优点在于,例如,文件夹中的临时要素类会自动添加“ .shp”。该方法是arcpy.CreateScratchName()。
–科蒂斯价格
13年4月2日,0:48
评论
我同意@egdetti。它非常有用,非常强大,并显着加快了处理速度。但是,实际上您不需要删除工作空间/图层,因为在关闭应用程序时它将清理自身。如前所述,如果发现in_memory工作区中的内容过多,则运行arcpy.Delete可能会有所帮助(有时是必需的)。
– RyanKDalton
2012年10月10日在22:02