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


    在上一篇文章【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

  • 相关阅读:
    记一次模型调试问题:使用TextLSTM/RNN学习不动,损失和acc均无变化
    机器学习常用损失函数
    java多线程使用mdc追踪日志
    搜索笔记整理
    pytorch加载bert模型报错
    Transformer源代码解释之PyTorch篇
    matplotlib画图并设置风格
    PyTorch实现断点继续训练
    通过sklearn使用tf-idf提取英文关键词
    通过依存关系生成邻接矩阵
  • 原文地址:https://www.cnblogs.com/atravellers/p/12864274.html
Copyright © 2020-2023  润新知