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 相关文章推荐
有关wxpython pyqt内存占用问题分析
Jun 09 Python
Python深入学习之上下文管理器
Aug 31 Python
Python入门篇之正则表达式
Oct 20 Python
在Python的Flask框架中实现全文搜索功能
Apr 20 Python
python实现定时自动备份文件到其他主机的实例代码
Feb 23 Python
python学生管理系统代码实现
Apr 05 Python
python如何读写json数据
Mar 21 Python
python贪吃蛇游戏代码
Apr 18 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 Python
Python图片检索之以图搜图
May 31 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
PHP 应用程序的安全 -- 不能违反的四条安全规则
2006/11/26 PHP
php下清空字符串中的HTML标签的代码
2010/09/06 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
php中array_unshift()修改数组key注意事项分析
2016/05/16 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
jQuery实现html表格动态添加新行的方法
2015/05/28 Javascript
jquery超简单实现手风琴效果的方法
2015/06/05 Javascript
基于replaceChild制作简单的吞噬特效
2015/09/21 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
NodeJs的优势和适合开发的程序
2016/08/14 NodeJs
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
jQuery中on方法使用注意事项详解
2017/02/15 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
[45:16]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第一场 12.12
2020/12/16 DOTA
在Python中使用mechanize模块模拟浏览器功能
2015/05/05 Python
Python制作词云的方法
2018/01/03 Python
8种用Python实现线性回归的方法对比详解
2019/07/10 Python
python,Java,JavaScript实现indexOf
2020/09/09 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
JD Sports芬兰:英国领先的运动鞋和运动服饰零售商
2018/11/16 全球购物
秸秆管理实施方案
2014/03/15 职场文书
政治表现评语
2014/05/04 职场文书
人力资源职位说明书
2014/07/29 职场文书
先进员工获奖感言
2014/08/14 职场文书
办公室主任岗位竞聘书
2015/09/15 职场文书
员工聘用合同范本
2015/09/21 职场文书
如何在pycharm中快捷安装pip命令(如pygame)
2021/05/31 Python
python实现局部图像放大
2021/11/17 Python