[ArcGIS批处理] MOD04 | 影像分类(Arcpy)+抽取子集+投影+融合

【内容介绍】

  1. 将一个文件夹下的文件按照【一定的规则】分流到不同文件夹下
  2. 对一组数据进行批量抽取子集
  3. 对文件夹下的所有数据进行定义投影
  4. 对文件夹下的所有数据投影到指定坐标(UTM50N)
  5. 对文件夹下的所有栅格数据进行拼接


【工具箱】附录中有下载链接

在这里插入图片描述

批处理

【第一步】按规则分流数据

【数据】MOD04_L2数据气溶胶日产品(介绍请看附录)

【需求】该文件夹下有3天的日产品,按照名字中的A2001001、A2001003、A2001006进行分流数据

在这里插入图片描述

【工具】[1]ClassifyAndCreateProject

在这里插入图片描述

【结果】

在这里插入图片描述

【工程目录介绍】

  • project 创建的输出文件夹(即工程文件夹)
    • A2001001 产品日期
      • Data 原始数据文件夹
      • Subset 子集输出文件夹
      • DefineSRS 定义投影输出文件夹
      • Projection 投影输出文件夹
    • A2001003
      • … 下同

【第二步】抽取子集并定义坐标系

【打开一个MOD04数据】发现其具有219个波段,ID号从0开始;并且没有定义投影(在头文件中可知其投影为WGS84)

【需求】按照指定的波段进行抽取(举例:抽取ID=11的波段),并且定义投影为WGS84

在这里插入图片描述

在这里插入图片描述

【工具】[2]SubsetAndDefineProject

在这里插入图片描述

【结果】

  • 抽取子数据集输出在该产品集的Subset目录中在这里插入图片描述

  • 定义投影的结果输出在该产品集的DefineSRS中

    在这里插入图片描述

【第三步】批量投影

【需求】将产品集中的DefineSRS进行批量投影至WGS84_UTM_Zone_50N

【工具】[3]Project

在这里插入图片描述

【结果】投影的结果输出在该产品集的Projection中

在这里插入图片描述

【第四步】拼接(即ArcGIS中的镶嵌)

【需求】将Projection中的数据集进行拼接

【工具】[4]Mosaic

在这里插入图片描述

【结果】输出在A2001001文件夹下

在这里插入图片描述

【附录】工具详情

【工具箱】

在这里插入图片描述

【数据与工具】

[1] ClassfiyAndCreateProject

【说明】

  1. 基于Python实现业务逻辑
  2. 利用Arcpy模块,让ArcGIS充当UI界面
  3. 将.py文件做成ArcGIS的Toolbox,实现UI操作
    1. 制作成自定义工具:https://blog.csdn.net/summer_dew/article/details/98634003#_68

【Python代码】

# -*- coding: utf-8 -*-
# @Time    : 2019/8/6 16:38
# @Author  : PasserQi
# @Email   : passerqi@gmail.com
# @File    : ClassifyAndCreateProject
# @Software: PyCharm
# @Version :
# @Desc    :
#       1. classify multiple batches of data in same folder
#       2. create MOD04-L2 project in output folder

import sys
import os
import arcpy

# arcpy param
# input_dir = r"D:\mycode\GISandPython\2Arcpy\ArcGISTools\MOD04-L2\MOD04-L2_data"
# project_dir = r"D:\mycode\GISandPython\2Arcpy\ArcGISTools\MOD04-L2\project"
input_dir = sys.argv[1]
project_dir = sys.argv[2]

# project param
categorys = {
}

def classify(input_dir):
    fns = os.listdir(input_dir)
    if len(fns)==0:
        arcpy.AddMessage("[ERROR]\tCan't fine files in {}.".format(input_dir) )
    else:
        arcpy.AddMessage("[OK]\tFine {} files.".format( len(fns) ) )

    for fn in fns:
        category_name = fn.split('.')[1]
        # create dir
        if category_name not in categorys:
            categorys[category_name] = create_dir(category_name)
        # copy files
        data_dir = categorys[category_name]["Data"]
        srcfp = os.path.join(input_dir, fn)
        dstfp = os.path.join(data_dir, fn)
        copyfile(srcfp, dstfp)

    arcpy.AddMessage("[OK]\t" + project_dir)
    pass

def create_dir(category_name):
    ret = {
        "Data" : None,
        "Subset" : None,
        "DefineSRS" : None,
        "Projection" : None,
    }
    # category dir
    category_dir = os.path.join(project_dir, category_name)
    mkdir(category_dir)
    # create dir in category dir
    for dirname in ret.keys():
        if ret[dirname]==None:
            ret[dirname] = os.path.join(category_dir, dirname)
            mkdir( ret[dirname] )
    return ret

def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    if not os.path.exists(path):
        os.mkdir(path)
        arcpy.AddMessage("[OK] Create Dir:{}".format(path) )
        return True


def copyfile(srcfile,dstfile):
    import shutil
    if not os.path.isfile(srcfile):
        arcpy.AddMessage("[ERROR]\t%s not exist!"%(srcfile) )
    else:
        fpath,fname=os.path.split(dstfile)
        if not os.path.exists(fpath):
            os.makedirs(fpath)
        shutil.copyfile(srcfile,dstfile)
        arcpy.AddMessage("[OK] copy %s -> %s"%(srcfile, dstfile) )

if __name__ == '__main__':
    classify(input_dir)

    pass

[2] SubsetAndDefineProject

在这里插入图片描述

【重点】怎么引用模型中的变量,将变量名用%标识

在这里插入图片描述

[3] Project

在这里插入图片描述

[4] Mosaic

在这里插入图片描述

【附录】MOD04产品介绍

【MOD/MYD04】MODIS Terra/Aqua Aerosol 5-Min L2,是NASA发布的Level 2级气溶胶产品,可用来获取全球海洋和陆地环境的大气气溶胶光学特性(如:光学厚度和大小分布)和质量浓度,通过查找表(LUT)反演得到反射和传输通量,以及其他质量控制和辅助参数,其空间分辨率为3km、10km,以HDF4格式提供

  • 【C5版本】10km分辨率的气溶胶产品
  • 【C6版本(MOD/MYD04_3K)】3km分辨率的气溶胶产品,全称MODIS Terra/Aqua Aerosol 5-Min L2 Swath 3km

【命名规则】官方例子

在这里插入图片描述

【举例】MOD04_L2.A2001001.0110.061.2017220225602.hdf

  • 【MOD04_L2】产品类型(Earth Science Data Type Name),MOD04_L2是气溶胶的日产品
  • 【A2001001】卫星扫过这片区域的时间(年份、月份、天数)
    • 【A】Acquisition,因为modsi卫星分上午卫星和下午卫星就分别用A和T来表示的
    • 【2001】年
    • 【001】Julian Date是一种历法计数的方法,实际上也就是代表2001年的第1天
  • 【0110】卫星扫过这片区域的时间(小时和分钟),其中这个时间是UTC时间
  • 【061】Collection Version,是其数据的版本号,像其前一个版本好像就是051的,也看过不少论文是做这种版本之间差异的
  • 【2017220225602】数据制作的时间(包括年份、月份、天数、小时、分钟、秒)
    • 2017年,第220天,22时56分2秒制作

【相关链接】

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页