PRO MOD04L2__MOSAIC
;使用前务必保证待镶嵌影像单独存放在一个文件夹
;使用前务必保证影像的背景值被忽略或者背景值有设为无效值
;使用前务必保证影像的坐标投影统一
;使用前务必保证影像的名称符合命名规则,有规律可循
;使用前务必通读注释,尤其是参数调整部分
;如遇到调参出问题可联系博主本人1326261121@qq.com
COMPILE_OPT idl2
e = ENVI(/headless)
ENVI,/restore_base_save_files
ENVI_BATCH_INIT
inpath=DIALOG_PICKFILE(TITLE='选择输入数据目录',/DIRECTORY)
outpath=DIALOG_PICKFILE(TITLE='选择输出数据目录',/DIRECTORY)
;##########调参部分##########
day=31;总共镶嵌31组影像,一个月的影像有31天也就分了31组,有多少天的影像输入多少
file_names=FILE_SEARCH(inpath,'*.dat',count=count);输入文件如果是tif此处将.dat改成.tif
PRINT,file_names[0];print的结果 E:\DATA\mod04_L2\mctk_output\MOD04_L2.A2020183.0130._Swath_2D_1_georef.dat
PRINT,'确定命名规则匹配无误:'
;用来针对命名规则对每一天的影像命名分组,影像文件名从起始到第17个字符位置,仅需要对数字17做调整,三处调参部分一致
PRINT,STRMID(FILE_BASENAME(file_names[1]),0,17);print的结果 MOD04_L2.A2020183
PRINT,STRMID(FILE_BASENAME(file_names[0]),0,17);print的结果 MOD04_L2.A2020183
;两次print的一致,并且print的结果能够区分出每一天的数据
;##########调参部分##########
PRINT,'共计',count,'景影像.'
count=count-1
PRINT, '开始处理数据 : ', SYSTIME()
arr=MAKE_ARRAY(day,1,/OBJ)
d=0
arr[0]=LIST()
arr[0].ADD,file_names[d]
;##########调参部分##########
FOR i=0,count-1 DO BEGIN
IF STRMID(FILE_BASENAME(file_names[i+1]),0,17) $
EQ STRMID(FILE_BASENAME(file_names[i]),0,17) $
THEN BEGIN
;##########调参部分##########
arr[d].ADD,file_names[i+1]
ENDIF ELSE BEGIN
d=d+1
arr[d]=LIST()
arr[d].ADD,file_names[i+1]
ENDELSE
ENDFOR
FOR i=0,day-1 DO BEGIN
file_list=arr[i]
;##########调参部分##########
root_name=STRMID(FILE_BASENAME(file_list[0]),0,17);此处根据上方注释描述调整数值17
;##########调参部分##########
n=N_ELEMENTS(file_list)
file=MAKE_ARRAY(n,1,/STRING)
scenes=!NULL
FOR a=0,n-1 DO BEGIN
file[a]=file_list[a]
raster=e.OPENRASTER(file[a])
scenes=[scenes,raster]
ENDFOR
mosaicRaster=ENVIMOSAICRASTER(scenes)
;结果输出
outfile=outpath+root_name+'.dat';如果要输出tif文件,将.dat改成.tif,下一行ENVI改成TIFF
mosaicRaster.EXPORT,outfile,'ENVI';如果要输出tif文件,将此处ENVI改写成TIFF
ENDFOR
END