MODIS数据一般为分副存放,大区域研究时需要进行合并处理。好在NASA及USGS官网提供了专门的处理工具MRT,进行合并、重投影、采样等操作,操作便捷,缺点是手动一次只能处理一期影像。为了解决大数据量的操作,官网及网友给出了批处理(bat)相关参考代码,详见后文链接。但多数博主在应用时多是通过多次复制粘贴后修改文件名,来实现多期影像的批量处理,用for循环结构的不多见。因为需要处理的数据较多,所以想通过用DOS的for循环命令进行相应处理,但搜索后发现DOS的语言结构与主流的C、R、Python等差异较大,所以稍花了些时间,主要是调整细节,但难免有错漏,且不够简洁,后期有时间再完善吧。代码在本博电脑测试可行,但也可能换机换样
具体运用时灵活解决吧。另外,若有大神有其他高见欢迎指出。
![MODIS数据批处理操作 MODIS数据批处理操作](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
上代码:
@echo off
::建立相应文件夹
md D:\MOD13Q1\Temp
md D:\MOD13Q1\NDVI
for /l %%i in (2000,1,2016) do (
for /l %%j in (1,1,365) do (
::按年日格式查找对应数据
if %%j lss 10 (dir /b/s D:\MOD13Q1\Data\*A%%i00%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt
::判断列表是否为空,注意将批处理文件放到Temp文件中运行,避免搜索不到生成的%%i%%j.txt列表文件
for /f "delims=" %a in ('dir /b %%i%%j.txt') do (
if %~za neq 0 (
::拼接合并
D:
MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 "
::重采样
RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i00%%j.tif
::删除提取的临时波段文件
del D:\MOD13Q1\Temp\MOD%%i%%j.hdf
::删除检索到的文件列表
del D:\MOD13Q1\Temp\%%i%%j.txt
)
) else (if %%j gtr 99 (dir /b/s D:\MOD13Q1\Data\*A%%i%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt
for /f "delims=" %a in ('dir /b %%i%%j.txt') do (
if %~za neq 0 (
D:
MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 "
RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i%%j.tif
del D:\MOD13Q1\Temp\MOD%%i%%j.hdf
del D:\MOD13Q1\Temp\%%i%%j.txt
)
) else (dir /b/s D:\MOD13Q1\Data\*A%%i0%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt
for /f "delims=" %a in ('dir /b %%i%%j.txt') do (
if %~za neq 0 (
D:
MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 "
RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i0%%j.tif
del D:\MOD13Q1\Temp\MOD%%i%%j.hdf
del D:\MOD13Q1\Temp\%%i%%j.txt
)
)
)
)
)
pause
--------------------------------------------------------------------------------------------------------------
分割线 12.13日
--------------------------------------------------------------------------------------------------------------
Tips:因为源代码中新建文件夹的问题,容易混乱,所以运用echo新建bat处理。这样无论数据存放在何处,只需替换数据所在路径即可,其他操作可由代码自主实现。完成路径替换后,此代码可在任意文件窗口调出cmd命令行(可shift+鼠标右键调用)后复制粘贴后运行。
::若直接运行出错,则将此代码复制粘贴到cmd命令窗口中执行
@echo off
::建立相应文件夹
md D:\MOD13Q1\Temp
md D:\MOD13Q1\NDVI
::生成批处理文件
echo.for /l %%i in (2000,1,2016) do (>>D:\MOD13Q1\Temp\Run.bat
echo. for /l %%j in (1,1,365) do (>>D:\MOD13Q1\Temp\Run.bat
echo. ::按年日格式查找对应数据,注意将“D:\MOD13Q1\Data”替换为对应的数据存放文件路径>>D:\MOD13Q1\Temp\Run.bat
echo. if %%j lss 10 (dir /b/s D:\MOD13Q1\Data\*A%%i00%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. ::判断列表是否为空,注意将批处理文件放到Temp文件中运行,避免搜索不到生成的%%i%%j.txt列表文件>>D:\MOD13Q1\Temp\Run.bat
echo. for /f "delims=" %a in ('dir /b %%i%%j.txt') do (>>D:\MOD13Q1\Temp\Run.bat
echo. if %~za neq 0 (>>D:\MOD13Q1\Temp\Run.bat
echo. ::拼接合并>>D:\MOD13Q1\Temp\Run.bat
echo. D:>>D:\MOD13Q1\Temp\Run.bat
echo. MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 ">>D:\MOD13Q1\Temp\Run.bat
echo. ::重采样>>D:\MOD13Q1\Temp\Run.bat
echo. RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i00%%j.tif>>D:\MOD13Q1\Temp\Run.bat
echo. ::删除提取的临时波段文件>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\MOD%%i%%j.hdf>>D:\MOD13Q1\Temp\Run.bat
echo. ::删除检索到的文件列表>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. )>>D:\MOD13Q1\Temp\Run.bat
echo. ) else (if %%j gtr 99 (dir /b/s D:\MOD13Q1\Data\*A%%i%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. for /f "delims=" %a in ('dir /b %%i%%j.txt') do (>>D:\MOD13Q1\Temp\Run.bat
echo. if %~za neq 0 (>>D:\MOD13Q1\Temp\Run.bat
echo. D:>>D:\MOD13Q1\Temp\Run.bat
echo. MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 ">>D:\MOD13Q1\Temp\Run.bat
echo.>>D:\MOD13Q1\Temp\Run.bat
echo. RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i%%j.tif>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\MOD%%i%%j.hdf>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. )>>D:\MOD13Q1\Temp\Run.bat
echo. ) else (dir /b/s D:\MOD13Q1\Data\*A%%i0%%j*.txt >> D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. for /f "delims=" %a in ('dir /b %%i%%j.txt') do (>>D:\MOD13Q1\Temp\Run.bat
echo. if %~za neq 0 (>>D:\MOD13Q1\Temp\Run.bat
echo. D:>>D:\MOD13Q1\Temp\Run.bat
echo. MRTMOSAIC -i D:\MOD13Q1\Temp\%%i%%j.txt -o D:\MOD13Q1\Temp\MOD%%i%%j.hdf -s "1 0 0 0 0 0 0 0 0 0 0 0 ">>D:\MOD13Q1\Temp\Run.bat
echo.>>D:\MOD13Q1\Temp\Run.bat
echo. RESAMPLE -p D:\MOD13Q1\Temp\test.prm -i D:\MOD13Q1\Temp\MOD%%i%%j.hdf -o D:\MOD13Q1\NDVI\A%%i0%%j.tif>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\MOD%%i%%j.hdf>>D:\MOD13Q1\Temp\Run.bat
echo. del D:\MOD13Q1\Temp\%%i%%j.txt>>D:\MOD13Q1\Temp\Run.bat
echo. )>>D:\MOD13Q1\Temp\Run.bat
echo. )>>D:\MOD13Q1\Temp\Run.bat
echo. )>>D:\MOD13Q1\Temp\Run.bat
echo.)>>D:\MOD13Q1\Temp\Run.bat
echo.)>>D:\MOD13Q1\Temp\Run.bat
echo.pause>>D:\MOD13Q1\Temp\Run.bat
::判断批处理文件是否存在,并运行批处理
if exist D:\MOD13Q1\Temp\Run.bat (D:\MOD13Q1\Temp\Run.bat)
pause
注:此博为原创,只为交流,禁止商用,侵权纠责。
参考:
MODIS Reprojection Tool | LP DAAC :: NASA Land Data Products and Services https://lpdaac.usgs.gov/node/63
利用MRT进行MODIS产品的批处理步骤_你若美好_新浪博客 http://blog.sina.com.cn/s/blog_8259d7090102vasn.html
批处理命令 For循环命令详解! - CSDN博客 http://blog.csdn.net/jeefchen/article/details/5663822