python調(diào)用HEG工具批量處理MODIS數(shù)據(jù)的方法及注意事項(xiàng)
下面的代碼主要用于使用python語(yǔ)言調(diào)用NASA官方的MODIS處理工具HEG進(jìn)行投影坐標(biāo)轉(zhuǎn)換與重采樣批量處理
主要參考
- HEG的用戶手冊(cè):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用戶手冊(cè)批量生成批處理參數(shù)文件,可以在HEG工具中生成一個(gè)文件,拿來(lái)自己改改用用
- 具體調(diào)用哪一個(gè)工具,參數(shù)文件如何寫,請(qǐng)一定仔細(xì)閱讀用戶手冊(cè),東西全都在上面。一般常用的是resample.exe和swtif.exe,如果實(shí)在無(wú)法判斷可以先用HEG的GUI處理一個(gè)自己的數(shù)據(jù),保存一個(gè)prm文件,然后根據(jù)這個(gè)文件中的參數(shù),對(duì)照著用戶手冊(cè)一個(gè)一個(gè)的找,就可以了。
- 生成參數(shù)文件寫入時(shí)一定要注意,設(shè)定換行符為‘\n',fo=open(prmfilename,'w',newline='\n'),否則由于在windows系統(tǒng)下默認(rèn)換行符為‘\r\n',程序無(wú)法運(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ù)具體的處理問(wèn)題設(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',則無(wú)法運(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),希望對(duì)大家有所幫助!
相關(guān)文章
Python Dataframe 指定多列去重、求差集的方法
今天小編就為大家分享一篇Python Dataframe 指定多列去重、求差集的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07
Python實(shí)現(xiàn)某論壇自動(dòng)簽到功能
這篇文章主要介紹了Python實(shí)現(xiàn)論壇自動(dòng)簽到功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
詳解用python -m http.server搭一個(gè)簡(jiǎn)易的本地局域網(wǎng)
這篇文章主要介紹了詳解用python -m http.server搭一個(gè)簡(jiǎn)易的本地局域網(wǎng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Django更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)步驟
這篇文章主要介紹了Django更新models數(shù)據(jù)庫(kù)結(jié)構(gòu)的操作步驟,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
Python編程實(shí)現(xiàn)下載器自動(dòng)爬取采集B站彈幕示例
這篇文章主要介紹了使用Python編程來(lái)實(shí)現(xiàn)一個(gè)下載器可以自動(dòng)爬取采集B站彈幕的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-10-10
python基礎(chǔ)之類型轉(zhuǎn)換函數(shù)
這篇文章主要介紹了python類型轉(zhuǎn)換函數(shù),實(shí)例分析了Python中返回一個(gè)返回值與多個(gè)返回值的方法,需要的朋友可以參考下2021-10-10
4種Python基于字段的不使用元類的ORM實(shí)現(xiàn)方法總結(jié)
在 Python 中,ORM(Object-Relational Mapping)是一種將對(duì)象和數(shù)據(jù)庫(kù)之間的映射關(guān)系進(jìn)行轉(zhuǎn)換的技術(shù),本文為大家整理了4種不使用元類的簡(jiǎn)單ORM實(shí)現(xiàn)方式,需要的可以參考下2023-12-12
如何遠(yuǎn)程使用服務(wù)器上的Jupyter notebook
這篇文章主要介紹了如何遠(yuǎn)程使用服務(wù)器上的Jupyter notebook,主要是在服務(wù)器端執(zhí)行操作,需要特別注意為了防止遠(yuǎn)程中斷,使用掛起操作,即執(zhí)行nohup jupyter notebook,需要的朋友可以參考下2023-02-02

