atravellers

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

使用内存作为工作空间,提升地理处理工具性能

在上一篇文章【0101-ArcPy:将脚本工具的处理结果作为参数输出】中,我们在执行要素裁剪工具的时候,会生成一个要素类,按说这个要素类不是最终想要的结果,最终想要的是这个要素类缓冲10公里之后的要素。类似这样的中间结果,默认的情况下一般是保存在临时工作空间中。临时工作空间的位置可以通过以下代码指定:

# Set the scratchWorkspace environment to local file geodatabase
arcpy.env.scratchWorkspace = "c:/data/scratchoutput.gdb"

但是,这里有个不好的一点的,需要把数据写入到文件中,如果执行的脚步中有很多的中间数据,那么工具的执行效率是会慢很多。所以Esri提供了将临时数据放到内存中的解决方案。具体可以参考以下代码:

# -*- coding:utf-8 -*-
import arcpy
# 设置输入要素
inputFeatures = arcpy.GetParameterAsText(0)
# 设置裁剪要素
clipFeatures = arcpy.GetParameterAsText(1)
# 设置输出要素
outFeatures = arcpy.GetParameterAsText(2)
# 在内存中创建一个临时要素类,使用in_memory来表示空间空间为内存
tempData = arcpy.CreateScratchName("tempClipOutFC",data_type="FeatureClass",workspace="in_memory")
# 设置输出结果是否覆盖
arcpy.env.overwriteOutput = True

try:
clipOutFeatureClass = arcpy.Clip_analysis(inputFeatures, clipFeatures, tempData, 1.5)
arcpy.Buffer_analysis(clipOutFeatureClass, outFeatures, "10 Kilometers", "FULL", "ROUND", "NONE")
except Exception as err:
arcpy.AddError(err)

在上面的代码中,我们使用了:

tempData = arcpy.CreateScratchName("tempClipOutFC",data_type="FeatureClass",workspace="in_memory")

CreateScratchName方法的目的是为指定的数据类型创建唯一的临时路径名称,要使用内存作为工作空间,需要指定workspace为in_memory。将数据写入内存工作空间要明显快于写入其他格式(如 shapefile 或地理数据库要素类)。但写入内存工作空间的数据是临时性的,将在关闭应用程序时被删除。
同时,需要注意的是我们还对生成的结果设置了覆盖操作:

# 设置输出结果是否覆盖
arcpy.env.overwriteOutput = True
测试的时候一般是这样操作,生产环境需要根据业务需要配置。
要使用内存作为工作空间,需要留意以下几点:
1. 写入内存工作空间的数据是临时性的,将在关闭应用程序时被删除。
2. 表、要素类和栅格可写入内存工作空间。
3. 内存工作空间不支持扩展的地理数据库元素,如子类型、属性域、制图表达、拓扑、几何网络以及网络数据集。
4. 不能在内存工作空间中创建要素数据集或文件夹。

原文链接:https://blog.csdn.net/peckerzeng/java/article/details/79317149

posted on   zhaojp  阅读(285)  评论(0编辑  收藏  举报

编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示