python调用HEG工具批量处理MODIS数据的方法及注意事项
下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理
主要参考
- HEG的用户手册:https://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEG215/EED2-TP-030_Rev01_HEG_UsersGuide_2.15.pdf
- HEG批处理帮助:https://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEG_Batch_job_Help.htm
主要的注意事项如下:
- 首先按照官方指南安装HEG工具,具体安装步骤可参考我的上篇博客:https://www.cnblogs.com/yhpan/p/11298595.html
- 根据HEG用户手册批量生成批处理参数文件,可以在HEG工具中生成一个文件,拿来自己改改用用
- 具体调用哪一个工具,参数文件如何写,请一定仔细阅读用户手册,东西全都在上面。一般常用的是resample.exe和swtif.exe,如果实在无法判断可以先用HEG的GUI处理一个自己的数据,保存一个prm文件,然后根据这个文件中的参数,对照着用户手册一个一个的找,就可以了。
- 生成参数文件写入时一定要注意,设定换行符为‘\n',fo=open(prmfilename,'w',newline='\n'),否则由于在windows系统下默认换行符为‘\r\n',程序无法运行成功
下面是源码分享
#-*-coding:utf-8-*-
"""
CreatedonSunFeb1611:27:192020
调用HEG相关工具批处理MODIS数据,主要完成投影坐标转换与重采样
@author:pan
"""
importos
#设置HEG相关环境变量
os.environ['MRTDATADIR']='D:/MyApps/HEG/HEG_Win/data'
os.environ['PGSHOME']='D:/MyApps/HEG/HEG_Win/TOOLKIT_MTD'
os.environ['MRTBINDIR']='D:/MyApps/HEG/HEG_Win/bin'
#设置HEG的bin路径
hegpath='D:/MyApps/HEG/HEG_Win/bin'
#指定处理模块的可执行程序文件路径,此处采用resample.exe,可以根据具体的处理问题设置
hegdo=os.path.join(hegpath,'resample.exe')
hegdo=hegdo.replace('\\','/')#全路径以“/”连接
#指定输入数据的路径
inpath=r'C:\Users\pan\Desktop\Py_ex\data\hdf'
inpath=inpath.replace('\\','/')
#指定输出数据的路径
outpath=r'C:\Users\pan\Desktop\Py_ex\data\hdf\out'
outpath=outpath.replace('\\','/')
#os.chdir(inpath)#改变当前工作目录到输入数据目录
#获取当前文件夹下的所有hdf文件
allfiles=os.listdir(inpath)
allhdffiles=[]
foreachfileinallfiles:
ifos.path.splitext(eachfile)[1]=='.hdf':
allhdffiles.append(eachfile)
print('--'*20)
print('文件数量为:',len(allhdffiles),',所有hdf文件如下')
print(''+'\n'.join(allhdffiles))
print('--'*20)
#prm文件设置模块,需要首先在HEG工具中生成一个参考的prm文件,示例如下
#设置prm文件存储路径
prmpath=r"C:\Users\pan\Desktop\Py_ex\data\hdf\prm"
prmpath=prmpath.replace('\\','/')
foreachhdfinallhdffiles:
prm=['NUM_RUNS=1\n',
'BEGIN\n',
'INPUT_FILENAME='+inpath+'/'+eachhdf+'\n',
'OBJECT_NAME=MODIS_Grid_8Day_1km_LST|\n',
'FIELD_NAME=LST_Day_1km\n',
'BAND_NUMBER=1\n','SPATIAL_SUBSET_UL_CORNER=(90.0-180.0)\n',
'SPATIAL_SUBSET_LR_CORNER=(-90.0180)\n',
'RESAMPLING_TYPE=BI\n',
'OUTPUT_PROJECTION_TYPE=ALBERS\n',
'ELLIPSOID_CODE=WGS84\n',
'OUTPUT_PROJECTION_PARAMETERS=(0.00.025.047.0105.00.00.00.00.00.00.00.00.00.00.0)\n',
'OUTPUT_PIXEL_SIZE=500.0\n',
'OUTPUT_FILENAME='+outpath+'/'+eachhdf+'_out.tif\n',
'OUTPUT_TYPE=GEO\n',
'END\n']
prmfilename=prmpath+'/'+eachhdf+'.prm'
prmfilename=prmfilename.replace('\\','/')
#这里一定要注意,设定换行符为‘\n',否则由于在windows系统下默认换行符为‘\r\n',则无法运行成功
fo=open(prmfilename,'w',newline='\n')
fo.writelines(prm)
fo.close()
foreachhdfinallhdffiles:
prmfilepath=prmpath+'\\'+eachhdf+'.prm'
prmfilepath=prmfilepath.replace('\\','/')
try:
resamplefiles='{0}-P{1}'.format(hegdo,prmfilepath)
os.system(resamplefiles)
print(eachhdf+'hasfinished')
except:
#提示错误信息
print(eachhdf+'waswrong')
总结
以上所述是小编给大家介绍的python调用HEG工具批量处理MODIS数据的方法及注意事项,希望对大家有所帮助!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。