利用IDL调用task及自定义task参考以下文章和视频
https://blog.csdn.net/lijie45655/article/details/103738004
https://blog.csdn.net/qq_33356563/article/details/81437002
PPT https://mp.weixin.qq.com/s/m_5T0f7OgfV2ja92adbLEw
视频 【无限可能的ENVITask开发技术】 https://www.bilibili.com/video/BV1K14y1t7R9/
二、方法
在ENVI安装目录下的F:\ENVI\ENVI53\custom_code文件夹找到TVDI工具对应的task文件,根据文件参数编写程序
三、代码
pro TvdiBatch
compile_opt idl2
NDVIdir = 'H:\240329\NDVI201603\';路径
LSTdir = 'H:\240329\LSTmiTa201603\'
NDVIfiles=file_search(NDVIdir,"*.tif",count=nums)
print,nums
LSTfiles=file_search(LSTdir,"*.tif",count=nums); file_search返回包含路径的名字,字符串数组
print,nums; print两个num目的是检查两个文件夹NDVI和LST数据个数一样
e=envi()
for i=0,nums-1 do begin
print, i
basename=file_basename(NDVIfiles[i]) ;获取输入影像文件名
output_rootname=strmid(basename,10,10) ;获取指定范围名字,注意10,10表示第十个开始向后数十个,idl是从0开始的
output_location='H:\240329\iTVDI201603\';(右侧一定要反斜杠!!)
output_name=STRJOIN([output_location,'iTVDI',output_rootname,'.dat']);.tif格式不可以
NDVIraster = e.OpenRaster(NDVIfiles[i])
LSTraster = e.OpenRaster(LSTfiles[i]);从字符串到enviraster格式,要open
Task = ENVITask('TVDITask_Hanzt')
Task.raster1 = NDVIraster
Task.raster2 = LSTraster
;输出取决于direction
Task.display = 0
Task.output_Raster_URI = output_name;感觉也可以后续引用Task.output_Raster另存为,反正在临时路径的文件都会自动删除
; outputRaster = TASK.OUTPUT_RASTER
; outputRaster.export, 'C:/a.dat', 'envi'
Task.Execute
;NDVIraster.close
;LSTraster.close
endfor
print, '______________________ok!'
end
构建及debug过程见下篇【ENVItask(二)】IDL批量计算TVDI的代码构建思路及bug