MODIS数据批处理操作

MODIS数据一般为分副存放,大区域研究时需要进行合并处理。好在NASA及USGS官网提供了专门的处理工具MRT,进行合并、重投影、采样等操作,操作便捷,缺点是手动一次只能处理一期影像。为了解决大数据量的操作,官网及网友给出了批处理(bat)相关参考代码,详见后文链接。但多数博主在应用时多是通过多次复制粘贴后修改文件名,来实现多期影像的批量处理,用for循环结构的不多见。因为需要处理的数据较多,所以想通过用DOS的for循环命令进行相应处理,但搜索后发现DOS的语言结构与主流的C、R、Python等差异较大,所以稍花了些时间,主要是调整细节,但难免有错漏,且不够简洁,后期有时间再完善吧。代码在本博电脑测试可行,但也可能换机换样 MODIS数据批处理操作具体运用时灵活解决吧。另外,若有大神有其他高见欢迎指出。
上代码:
@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
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值