• 教你自己写Arcpy批处理程序


    自己写Arcpy批处理栅格和矢量

    先上代码,讲解各行代码的意思,从而达到自己写代码的目的

    #....Edit by Longhao Wang....
    import arcpy
    from arcpy import env
    from arcpy.sa import *
    import os
    import os.path
    import sys
    arcpy.env.workspace="D:/OneDrive/UCAS/group/Tian/tif"
    rootdir="D:/OneDrive/UCAS/group/Tian/tif"
    inPointFeatures = "D:/OneDrive/UCAS/group/Tian/Export_Output.shp"
    for dirpath,filename,filenames in os.walk(rootdir):
        for files in filenames:
            if os.path.splitext(files)[1]=='.tif':
                filepath= os.path.join(dirpath,files)
                inRaster = filepath
                arcpy.env.snapRaster = filepath
                outname = files[2:10]
                outnamepath=r"D:\OneDrive\UCAS\group\Tian\out\table_" + outname + '.shp'
                out_xls=r"D:\OneDrive\UCAS\group\Tian\out\table_" + outname + '.xls'
                arcpy.CheckOutExtension("Spatial")
                outExtractPoint = ExtractValuesToPoints(inPointFeatures, inRaster, outnamepath,
                          "INTERPOLATE", "VALUE_ONLY")
                arcpy.TableToExcel_conversion(outExtractPoint, out_xls)
                print outname
                print "ok"
    
    • 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

    为方便说明,逐行讲解:

    本代码实现【把栅格值提取到点】:输入元素是栅格影像 + 点矢量,输出带像元值属性的矢量表

    本代码实现【表转excel】:把输出的矢量点属性表转为xls

    image-20221012204150127

    • 1-3行是使用Arcpy所必需的,5-7行是python处理文件夹的方便操作
    • 第8行输入待提取栅格值的栅格文件集合的路径
    • 第9行与第8行相同
    • 第10行是输入点矢量的路径+文件名

    接下来对影像存储的文件夹进行遍历,保证文件夹中都是tif

    • 第14行把路径和文件名合并成一个字符串,方便读取tif
    • 第17行,files是每个文件夹的名字,应该为China20210412.tif(举例)我们用切片把20210412提取出来,方便表示结果,存为outname
    • 第18行,outnamepath是存储矢量点的位置,19行同理,是excel
    • 第21,23行是核心代码,分别实现了提取值到点,和表转excel功能

    因此,若要批量对数据进行处理,只需修改核心函数就可以了,其次再修改文件名、文件夹、路径和切片就完成了。

    寻找函数的话,只需要在你想要的工具下面,点击Tool Help即可

    image-20221012205728560

    提供了源代码与数据讲解,我们只需要把核心函数复制过来就行了

    image-20221012205826551

    有了上述的基础后,我们也能自己实现功能了,我尝试了批量裁剪tif的代码,你也可以撰写自己的代码

    import arcpy
    from arcpy import env
    from arcpy.sa import *
    import os
    import os.path
    import sys
    arcpy.env.workspace=r"D:\Desktop\Study\Academic1\study2\vcf"
    rootdir=r"D:\Desktop\Study\Academic1\study2\vcf"
    for dirpath,filename,filenames in os.walk(rootdir):
        for files in filenames:
            if os.path.splitext(files)[1]=='.tif':
                filepath= os.path.join(dirpath,files)
                inRaster = filepath
                arcpy.env.snapRaster = filepath
                outname = files[8:12]
                outnamepath=r"D:\Desktop\Study\Academic1\study2\VCF_" + outname + 'china.tif'
                inMaskData =r"D:\Desktop\Study\Academic1\study2\mask_tif\cci\mask.shp"
                arcpy.CheckOutExtension("Spatial")
                outExtractByMask = ExtractByMask(inRaster, inMaskData)
                outExtractByMask.save(outnamepath)
                print outname
                print "ok"
    
    
    			
    
    • 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

    ``

  • 相关阅读:
    程序地址空间
    python学习笔记(7)—— 类
    win10 安装yolov7 训练自己的数据集
    IDEA手动导入jar包到maven本地库
    我的创作纪念日
    python文件中设置环境变量
    scrollIntoView使用与属性详解
    uniapp --- 实现图片压缩(兼容H5)
    实时流量监控
    ssm及springboot整合shiro
  • 原文地址:https://blog.csdn.net/wlh2067/article/details/127934577