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中的choice()方法使用详解
May 15 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
利用python的socket发送http(s)请求方法示例
May 07 Python
python实现画一颗树和一片森林
Jun 25 Python
使用pandas read_table读取csv文件的方法
Jul 04 Python
Python中pip更新和三方插件安装说明
Jul 08 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
python 计算两个列表的相关系数的实现
Aug 29 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
python如何实现单链表的反转
Feb 10 Python
Python tkinter实现简单加法计算器代码实例
May 13 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
造就帕卡马拉的帕卡斯是怎么被发现的
2021/03/03 咖啡文化
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
php异常处理使用示例
2014/02/25 PHP
php实现搜索类封装示例
2016/03/31 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
Javascript学习笔记之 函数篇(一) : 函数声明和函数表达式
2014/06/24 Javascript
js操作cookie保存浏览记录的方法
2015/12/25 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
Vue中的无限加载vue-infinite-loading的方法
2018/04/08 Javascript
NodeJS 中Stream 的基本使用
2018/07/30 NodeJs
element-ui 关于获取select 的label值方法
2018/08/24 Javascript
微信小程序如何获取用户收货地址
2018/11/27 Javascript
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
在Python中使用dict和set方法的教程
2015/04/27 Python
通过Python爬虫代理IP快速增加博客阅读量
2016/12/14 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Django基础知识 URL路由系统详解
2019/07/18 Python
解决Pytorch 加载训练好的模型 遇到的error问题
2020/01/10 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
基于PyInstaller各参数的含义说明
2021/03/04 Python
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
大学生活学习的自我评价
2013/12/03 职场文书
创建无烟单位实施方案
2014/03/29 职场文书
局火灾防控工作方案
2014/05/25 职场文书
大学生实习证明
2015/06/16 职场文书
反腐倡廉学习心得体会范文
2015/08/15 职场文书
2019如何书写演讲稿?
2019/07/01 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
Java数据开发辅助工具Docker与普通程序使用方法
2021/09/15 Java/Android