【内容介绍】
- 将一个文件夹下的文件按照【一定的规则】分流到不同文件夹下
- 对一组数据进行批量抽取子集
- 对文件夹下的所有数据进行定义投影
- 对文件夹下的所有数据投影到指定坐标(UTM50N)
- 对文件夹下的所有栅格数据进行拼接
文章目录
【工具箱】附录中有下载链接
批处理
【第一步】按规则分流数据
【数据】MOD04_L2数据气溶胶日产品(介绍请看附录)
【需求】该文件夹下有3天的日产品,按照名字中的A2001001、A2001003、A2001006进行分流数据
【工具】[1]ClassifyAndCreateProject
【结果】
【工程目录介绍】
- project 创建的输出文件夹(即工程文件夹)
- A2001001 产品日期
- Data 原始数据文件夹
- Subset 子集输出文件夹
- DefineSRS 定义投影输出文件夹
- Projection 投影输出文件夹
- A2001003
- … 下同
- A2001001 产品日期
【第二步】抽取子集并定义坐标系
【打开一个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
【说明】
- 基于Python实现业务逻辑
- 利用Arcpy模块,让ArcGIS充当UI界面
- 将.py文件做成ArcGIS的Toolbox,实现UI操作
- 制作成自定义工具: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秒制作
【相关链接】