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贪吃蛇游戏编写代码
Oct 26 Python
python实现解数独程序代码
Apr 12 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
Python爬虫通过替换http request header来欺骗浏览器实现登录功能
Jan 07 Python
利用Python实现微信找房机器人实例教程
Mar 10 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
Python3.8对可迭代解包的改进及用法详解
Oct 15 Python
python中的数组赋值与拷贝的区别详解
Nov 26 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
python3.6.5基于kerberos认证的hive和hdfs连接调用方式
Jun 06 Python
Django模型验证器介绍与源码分析
Sep 08 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
php 引用(&)详解
2009/11/20 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
php微信公众平台开发(一) 配置接口
2016/12/06 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
php实现每日签到功能
2018/11/29 PHP
可实现多表单提交的javascript函数
2007/08/01 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
javascript和jquery实现设置和移除文本框默认值效果代码
2015/01/13 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
jQuery弹出窗口打开链接的实现代码
2016/12/24 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
jQuery EasyUI之验证框validatebox实例详解
2017/04/10 jQuery
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
ios设备中angularjs无法改变页面title的解决方法
2018/09/13 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
编写Python脚本来获取Google搜索结果的示例
2015/05/04 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python Elasticsearch索引建立和数据的上传详解
2019/08/04 Python
Python的垃圾回收机制详解
2019/08/28 Python
Python 寻找局部最高点的实现
2019/12/05 Python
python 解决flask uwsgi 获取不到全局变量的问题
2019/12/22 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
Python爬虫逆向分析某云音乐加密参数的实例分析
2020/12/04 Python
应收账款管理制度
2015/08/06 职场文书
工程移交协议书
2016/03/24 职场文书
带你学习MySQL执行计划
2021/05/31 MySQL