python调用HEG工具批量处理MODIS数据的方法及注意事项


Posted in Python onFebruary 18, 2020

下面的代码主要用于使用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

主要的注意事项如下:

  1. 首先按照官方指南安装HEG工具,具体安装步骤可参考我的上篇博客:https://www.cnblogs.com/yhpan/p/11298595.html
  2. 根据HEG用户手册批量生成批处理参数文件,可以在HEG工具中生成一个文件,拿来自己改改用用
  3. 具体调用哪一个工具,参数文件如何写,请一定仔细阅读用户手册,东西全都在上面。一般常用的是resample.exe和swtif.exe,如果实在无法判断可以先用HEG的GUI处理一个自己的数据,保存一个prm文件,然后根据这个文件中的参数,对照着用户手册一个一个的找,就可以了。
  4. 生成参数文件写入时一定要注意,设定换行符为‘\n',fo=open(prmfilename,'w',newline='\n'),否则由于在windows系统下默认换行符为‘\r\n',程序无法运行成功

下面是源码分享

# -*- coding: utf-8 -*-
"""
Created on Sun Feb 16 11:27:19 2020
调用HEG相关工具批处理MODIS数据,主要完成投影坐标转换与重采样
@author: pan
"""
import os

# 设置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 = []
for eachfile in allfiles:
  if os.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('\\', '/')
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('\\', '/')
  #这里一定要注意,设定换行符为‘\n',否则由于在windows系统下默认换行符为‘\r\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:
    # 提示错误信息
    print(eachhdf + 'was wrong')

总结

以上所述是小编给大家介绍的python调用HEG工具批量处理MODIS数据的方法及注意事项,希望对大家有所帮助!

Python 相关文章推荐
Python中decorator使用实例
Apr 14 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
Python字符串处理实例详解
May 18 Python
python 删除非空文件夹的实例
Apr 26 Python
解决Python网页爬虫之中文乱码问题
May 11 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
Django项目后台不挂断运行的方法
Aug 31 Python
python使用HTMLTestRunner导出饼图分析报告的方法
Dec 30 Python
新手学python应该下哪个版本
Jun 11 Python
python中可以声明变量类型吗
Jun 18 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
Oct 12 Python
将pytorch转成longtensor的简单方法
Feb 18 #Python
python实现查找所有程序的安装信息
Feb 18 #Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 #Python
Pytorch mask_select 函数的用法详解
Feb 18 #Python
pytorch masked_fill报错的解决
Feb 18 #Python
python分别打包出32位和64位应用程序
Feb 18 #Python
pandas和spark dataframe互相转换实例详解
Feb 18 #Python
You might like
德生H-501的评价与改造
2021/03/02 无线电
PHP+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
PHP 编程安全性小结
2010/01/08 PHP
Notice: Trying to get property of non-object problem(PHP)解决办法
2012/03/11 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PHP缓存工具XCache安装与使用方法详解
2018/04/09 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
深入理解JavaScript系列(6) 强大的原型和原型链
2012/01/15 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
封装好的一个万能检测表单的方法
2015/01/21 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
bootstrap使用validate实现简单校验功能
2016/12/02 Javascript
php简单数据库操作类的封装
2017/06/08 Javascript
详解微信小程序Radio选中样式切换
2017/07/06 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
浅谈Vue.js 中的 v-on 事件指令的使用
2018/11/25 Javascript
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
Python自动化测试基础必备知识点总结
2021/02/07 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
安全生产月活动总结
2014/05/04 职场文书
2015年大学迎新晚会总结
2015/07/16 职场文书