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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python文件的读写和异常代码示例
Oct 31 Python
tensorflow更改变量的值实例
Jul 30 Python
selenium+python自动化测试之使用webdriver操作浏览器的方法
Jan 23 Python
WxPython建立批量录入框窗口
Feb 27 Python
python实现大文本文件分割
Jul 22 Python
关于ResNeXt网络的pytorch实现
Jan 14 Python
使用python 计算百分位数实现数据分箱代码
Mar 03 Python
利用keras使用神经网络预测销量操作
Jul 07 Python
Python 获取异常(Exception)信息的几种方法
Dec 29 Python
Pandas的数据过滤实现
Jan 15 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生成略缩图代码
2012/07/16 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
PHP7新增运算符用法实例分析
2016/09/26 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
php7下的filesize函数
2019/09/30 PHP
jquery创建div 实现代码
2009/04/27 Javascript
js保存当前路径(cookies记录)
2010/12/14 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
IE8下Jquery获取select选中的值post到后台报错问题
2014/07/02 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
JQuery导航菜单选择特效
2016/04/11 Javascript
使用jQuery制作Web页面遮罩层插件的实例教程
2016/05/26 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
详解Python中的strftime()方法的使用
2015/05/22 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
python的re正则表达式实例代码
2018/01/24 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
pycharm下查看python的变量类型和变量内容的方法
2018/06/26 Python
Pandas过滤dataframe中包含特定字符串的数据方法
2018/11/07 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
下载与当前Chrome对应的chromedriver.exe(用于python+selenium)
2020/01/14 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
将pytorch转成longtensor的简单方法
2020/02/18 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
欧尚俄罗斯网上超市:Auchan俄罗斯
2018/05/03 全球购物
2014年党风廉政工作总结
2014/12/03 职场文书
律师函格式范本
2015/05/27 职场文书
Android开发实现极为简单的QQ登录页面
2022/04/24 Java/Android