在ArcPy的内存工作区中设置?


11

是否可以env.workspace = "in_memory"使用ArcGIS Pro和ArcGIS 10.2.2(或10.3)体系结构在ArcPy中进行设置?

我想做的是将快照倾点操作的输出写入内存而不是磁盘。

我意识到我可以写入磁盘然后将其带入内存,但这无济于事。我正在尝试优化一系列任务,以最大程度地减少将仅作为下一个过程的输入所需的过程输出写入物理介质。

Answers:


15

我将在这里提出一个答案,因为到目前为止,这两个答案都不是100%正确的。

有2个项目可能因工具而异。

  1. 如果它适合工作空间环境(此项目始终记录在工具帮助页面上)
  2. 是否可以利用in_memory工作空间(该项目可能没有明确记录。如果它不支持,您更有可能看到注释in_memory

只需回答“您可以将环境工作区设置为in_memory”。答案是肯定的。

>>> import arcpy
>>> arcpy.env.workspace = r"in_memory"
>>> arcpy.CopyFeatures_management(r"c:\temp\foo.shp", "myinmemoutput")
<Result 'in_memory\\myinmemoutput'>
>>> arcpy.Exists("myinmemoutput")
True

Snap Pour Point确实根据其文档说明了工作区环境,并解释了Python示例。测试表明,您可以将输出写入in_memory该变量引用并使用该变量引用...以放入另一个工具中,或保存结果

>>> import arcpy
>>> arcpy.env.workspace = r"in_memory"
>>> arcpy.CheckOutExtension("SPATIAL")
u'CheckedOut'
>>> snapOut = arcpy.sa.SnapPourPoint("e:/gpservices101/hydro/US30m/test.gdb/sourcepoint", "e:/gpservices101/hydro/US30m/Region08a/Input/elev_cm", 1,"PourPtID")
>>> snapOut
in_memory\SnapPou_sour1
>>> arcpy.Exists(snapOut)
True
>>> snapOut.save(r"c:\temp\todisk.tif")
>>> arcpy.Exists(r"c:\temp\todisk.tif")
True

-1

不幸的是,我不认为可以像您在问题中那样将工作区设置为in_memory位置。这样,地理处理工具会将其输出位置默认为in_memory工作区。

我刚刚尝试将工作空间设置为'\\in_memory'我自己,并使用简单的CopyFeatures_management()工具运行对其进行了测试。的字符串表示arcpy.env.workspace形式确实设置为'\\in_memory',但是CopyFeatures_management()在这种情况下,我认为该工具不考虑工作空间环境设置。

但是,如果我们可以将其设置in_memory为地图文档级别的默认工作区,那将是非常棒的。也许您可以将其作为ArcGIS Idea提出来?

好运。

编辑:

嘿,由于您正在使用“ 倾点”工具,因此我也在考虑,我们可能需要以其他方式来处理。捕捉倾泻点似乎直接作用于倾泻点要素类,并且不会创建输出要素类作为工具结果的一部分。我们可以创建倾点的临时in_memory副本并从那里开始工作吗?

编辑到编辑:

哦,是的,好的,您已经提到您已经意识到了这一点-抱歉。


我可以这样做(ArcGIS的想法)。我不知道为什么人们会否决这个问题?我同意你,吉姆,太棒了。
如果您不知道,请

啊,我现在明白了。是的,吉姆是正确的,将工作区设置为这样不起作用。您必须为各个进程指定in_memory。您无法通过该行为将其设置为默认值。
托马斯

1
否决票可能来自您简短的问题。我明白了您的意思-也许在更多上下文中稍微修改您的问题,其他人会投票支持?
吉姆(Jim)

好的,这是一个直接的问题,我认为不需要将其弄糊涂了。我会照你说的做。
如果您不知道,请

改写问题以查看是否存在另一种方式。
如果您不知道,请
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.