zoukankan      html  css  js  c++  java
  • 使用内存作为工作空间,提升地理处理工具性能

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

  • 相关阅读:
    SpringBoot整合Elasticsearch
    Elasticsearch环境搭建和介绍(Windows)
    Java并发AtomicBoolean类的使用
    RequestMapping详细用法
    RSA公钥加密 私钥解密
    java随机生成RSA密钥对
    java通过实体类生成数据库表 并生成注释
    设计模式-策略模式
    设计模式-模板方法模式使用
    设计模式-模板方法模式
  • 原文地址:https://www.cnblogs.com/atravellers/p/12864274.html
Copyright © 2011-2022 走看看