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 列表(List)操作方法详解
Mar 11 Python
python如何去除字符串中不想要的字符
Jul 05 Python
Python搭建Spark分布式集群环境
Jul 05 Python
pow在python中的含义及用法
Jul 11 Python
python代码 FTP备份交换机配置脚本实例解析
Aug 01 Python
Python+Redis实现布隆过滤器
Dec 08 Python
用Python去除图像的黑色或白色背景实例
Dec 12 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
对tensorflow 中tile函数的使用详解
Feb 07 Python
如何在mac版pycharm选择python版本
Jul 21 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 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/10/09 PHP
服务器端解压缩zip的脚本
2006/12/22 PHP
php随机输出名人名言的代码
2012/10/07 PHP
PHP处理excel cvs表格的方法实例介绍
2013/05/13 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
jQuery $.each的用法说明
2010/03/22 Javascript
ANT 压缩(去掉空格/注释)JS文件可提高js运行速度
2013/04/15 Javascript
JQuery设置文本框和密码框得到焦点时的样式
2013/08/30 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
jQuery下拉美化搜索表单效果代码分享
2015/08/25 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
详解Vue组件之间的数据通信实例
2017/06/17 Javascript
js实现文字列表无缝滚动效果
2017/06/23 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
Vant的安装和配合引入Vue.js项目里的方法步骤
2018/12/05 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
2019/08/20 Javascript
javascript实现函数柯里化与反柯里化过程解析
2019/10/08 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Vue使用Ref跨层级获取组件的步骤
2021/01/25 Vue.js
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python随机数函数代码实例解析
2020/02/09 Python
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
五年级英语教学反思
2014/01/31 职场文书
护理专业学生职业生涯规划范文
2014/03/11 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2014年信用社工作总结
2014/11/25 职场文书
SQL Server——索引+基于单表的数据插入与简单查询【1】
2021/04/05 SQL Server
python3操作redis实现List列表实例
2021/08/04 Python