python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法及注意事項(xiàng)
下面的代碼主要用于使用python語言調(diào)用NASA官方的MODIS處理工具HEG進(jìn)行投影坐標(biāo)轉(zhuǎn)換與重采樣批量處理
主要參考
- 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
主要的注意事項(xiàng)如下:
- 首先按照官方指南安裝HEG工具,具體安裝步驟可參考我的上篇博客:https://www.cnblogs.com/yhpan/p/11298595.html
- 根據(jù)HEG用戶手冊批量生成批處理參數(shù)文件,可以在HEG工具中生成一個(gè)文件,拿來自己改改用用
- 具體調(diào)用哪一個(gè)工具,參數(shù)文件如何寫,請一定仔細(xì)閱讀用戶手冊,東西全都在上面。一般常用的是resample.exe和swtif.exe,如果實(shí)在無法判斷可以先用HEG的GUI處理一個(gè)自己的數(shù)據(jù),保存一個(gè)prm文件,然后根據(jù)這個(gè)文件中的參數(shù),對照著用戶手冊一個(gè)一個(gè)的找,就可以了。
- 生成參數(shù)文件寫入時(shí)一定要注意,設(shè)定換行符為‘\n',fo=open(prmfilename,'w',newline='\n'),否則由于在windows系統(tǒng)下默認(rèn)換行符為‘\r\n',程序無法運(yùn)行成功
下面是源碼分享
# -*- coding: utf-8 -*- """ Created on Sun Feb 16 11:27:19 2020 調(diào)用HEG相關(guān)工具批處理MODIS數(shù)據(jù),主要完成投影坐標(biāo)轉(zhuǎn)換與重采樣 @author: pan """ import os # 設(shè)置HEG相關(guān)環(huán)境變量 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' # 設(shè)置HEG的bin路徑 hegpath = 'D:/MyApps/HEG/HEG_Win/bin' # 指定處理模塊的可執(zhí)行程序文件路徑,此處采用resample.exe,可以根據(jù)具體的處理問題設(shè)置 hegdo = os.path.join(hegpath, 'resample.exe') hegdo = hegdo.replace('\\', '/') # 全路徑以“/”連接 # 指定輸入數(shù)據(jù)的路徑 inpath = r'C:\Users\pan\Desktop\Py_ex\data\hdf' inpath = inpath.replace('\\', '/') # 指定輸出數(shù)據(jù)的路徑 outpath = r'C:\Users\pan\Desktop\Py_ex\data\hdf\out' outpath = outpath.replace('\\', '/') # os.chdir(inpath) #改變當(dāng)前工作目錄到輸入數(shù)據(jù)目錄 # 獲取當(dāng)前文件夾下的所有hdf文件 allfiles = os.listdir(inpath) allhdffiles = [] for eachfile in allfiles: if os.path.splitext(eachfile)[1] =='.hdf': allhdffiles.append(eachfile) print('--'*20) print('文件數(shù)量為:', len(allhdffiles),',所有hdf文件如下') print(' '+'\n '.join(allhdffiles)) print('--'*20) # prm文件設(shè)置模塊,需要首先在HEG工具中生成一個(gè)參考的prm文件,示例如下 # 設(shè)置prm文件存儲(chǔ)路徑 prmpath = r"C:\Users\pan\Desktop\Py_ex\data\hdf\prm" prmpath = prmpath.replace('\\', '/') for eachhdf in allhdffiles: 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.0 180 )\n', 'RESAMPLING_TYPE = BI\n', 'OUTPUT_PROJECTION_TYPE = ALBERS\n', 'ELLIPSOID_CODE = WGS84\n', 'OUTPUT_PROJECTION_PARAMETERS = ( 0.0 0.0 25.0 47.0 105.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.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('\\', '/') #這里一定要注意,設(shè)定換行符為‘\n',否則由于在windows系統(tǒng)下默認(rèn)換行符為‘\r\n',則無法運(yùn)行成功 fo=open(prmfilename,'w',newline='\n') fo.writelines(prm) fo.close() for eachhdf in allhdffiles: prmfilepath=prmpath +'\\'+ eachhdf + '.prm' prmfilepath=prmfilepath.replace('\\', '/') try: resamplefiles = '{0} -P {1}'.format(hegdo, prmfilepath) os.system(resamplefiles) print(eachhdf + ' has finished') except: # 提示錯(cuò)誤信息 print(eachhdf + 'was wrong')
總結(jié)
以上所述是小編給大家介紹的python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法及注意事項(xiàng),希望對大家有所幫助!
相關(guān)文章
使用paramiko遠(yuǎn)程執(zhí)行命令、下發(fā)文件的實(shí)例
下面小編就為大家?guī)硪黄褂胮aramiko遠(yuǎn)程執(zhí)行命令、下發(fā)文件的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10使paramiko庫執(zhí)行命令時(shí)在給定的時(shí)間強(qiáng)制退出功能的實(shí)現(xiàn)
這篇文章主要介紹了使paramiko庫執(zhí)行命令時(shí),在給定的時(shí)間強(qiáng)制退出,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03Python中轉(zhuǎn)換角度為弧度的radians()方法
這篇文章主要介紹了Python中轉(zhuǎn)換角度為弧度的radians()方法,是Python入門中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-05-05python 實(shí)現(xiàn)列表的切片操作允許索引超出范圍
這篇文章主要介紹了python 實(shí)現(xiàn)列表的切片操作允許索引超出范圍,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05python?遠(yuǎn)程執(zhí)行命令的詳細(xì)代碼
有時(shí)會(huì)需要在遠(yuǎn)程的機(jī)器上執(zhí)行一個(gè)命令,并獲得其返回結(jié)果。對于這種情況,python 可以很容易的實(shí)現(xiàn)。今天通過實(shí)例代碼介紹下python?遠(yuǎn)程執(zhí)行命令的相關(guān)知識(shí),感興趣的朋友一起看看吧2022-02-02python調(diào)用staf自動(dòng)化框架的方法
今天小編就為大家分享一篇python調(diào)用staf自動(dòng)化框架的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12解決jupyter notebook 出現(xiàn)In[*]的問題
這篇文章主要介紹了解決jupyter notebook 出現(xiàn)In[*]的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-04-04