python 调用HEG对MODIS数据进行批处理

HEG其实可以批处理可以看我另外一篇博文,不需要写代码。但是对于300以上数量的MODIS影像非常容易自动停止,而且越来越慢。还是打算利用python每个调用。

只提取了MODIS数据当中的IST一个波段,输出成tif,其他什么都没做。在处理前判断这个文件是否已经被处理出tif。注意出来的tif是没有进行拉伸的,应该乘以0.01才是真正的IST的值。

处理和直接调用HEG命名是一样的,注意处理前要先在HEG中生成一个参数化文件。

参考了https://blog.csdn.net/qq_44900916/article/details/116741205

复制代码
# -*- coding: utf-8 -*-
"""
Created on Tue Nov 14 23:56:18 2023

@author: Asus
"""

# -*- coding: utf-8 -*-
"""
调用HEG相关工具批处理MODIS数据
"""
import os

# 设置HEG相关环境变量\
os.environ['MRTDATADIR'] = 'D:\\HEG\\HEG_Win\\data'
os.environ['PGSHOME'] = 'D:\\HEG\\HEG_Win\\TOOLKIT_MTD'
os.environ['MRTBINDIR'] = 'D:\\HEG\\HEG_Win\\bin'

# 设置HEG的bin路径
hegpath = 'D:\\HEG\\HEG_Win\\bin'
# 指定处理模块的可执行程序文件路径,此处采用swtif.exe,可以根据具体的处理问题设置
hegdo = os.path.join(hegpath, 'swtif.exe')

# 指定输入数据的路径
inpath = r'E:\MODIS\previous'
# 指定输出数据的路径
outpath = r'E:\MODIS\HEGOUT'
# os.chdir(inpath) #改变当前工作目录到输入数据目录

# 获取当前文件夹下的所有hdf文件
allfiles = os.listdir(inpath)
allhdffiles = []
for eachfile in allfiles:
    if os.path.splitext(eachfile)[1] == '.hdf':
        if not os.path.exists(outpath+'/'+eachfile.replace(".hdf", "")+'_HEGOUT.tif'):
            allhdffiles.append(eachfile)
print('--'*20)
print('文件数量为:', len(allhdffiles), ',所有hdf文件如下')
print('  '+'\n  '.join(allhdffiles))
print('--'*20)

# prm文件设置模块,需要首先在HEG工具中生成一个参考的prm文件,示例如下
# 设置prm文件存储路径
prmpath = r"E:\heatflux\evaluateERAandMODIS\mosaic2019\PRM"
#prmpath = prmpath.replace('\\', '/')
for eachhdf in allhdffiles:
    prm = ['NUM_RUNS = 1\n',
           'BEGIN\n',
           'INPUT_FILENAME = ' + inpath+'\\'+eachhdf+'\n',
           'OBJECT_NAME = MOD_Swath_Sea_Ice\n',
           'FIELD_NAME = Ice_Surface_Temperature|\n',
           'BAND_NUMBER = 1\n',
           'OUTPUT_PIXEL_SIZE_X = 1000.0\n',
           'OUTPUT_PIXEL_SIZE_Y = 1000.0\n',
           'SPATIAL_SUBSET_UL_CORNER = ( 89.931801 -179.999954 )\n',
           'SPATIAL_SUBSET_LR_CORNER = (  65.863754 179.999481 )\n',
           'RESAMPLING_TYPE = NN\n',
           'OUTPUT_PROJECTION_TYPE = PS\n',
           'ELLIPSOID_CODE = DEFAULT\n',
           'OUTPUT_PROJECTION_PARAMETERS = ( 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0  )\n',
           'OUTPUT_FILENAME = ' + outpath+'\\'+eachhdf.replace(".hdf", "")+'_HEGOUT.tif\n',
           'OUTPUT_TYPE = GEO\n',
           'END\n'

           ]
    prmfilename = prmpath + '\\' +eachhdf.replace(".hdf", "")+'.prm'
    # 这里一定要注意,设定换行符为'\n',否则由于在windows系统下默认换行符为'\r\n',则无法运行成功
    fo=open(prmfilename,'w',newline='\n')
    fo.writelines(prm)
    fo.close()

for eachhdf in allhdffiles:
    prmfilepath = prmpath + '\\' + eachhdf.replace(".hdf", "") + '.prm'
    try:
        resamplefiles = '{0} -P {1}'.format(hegdo, prmfilepath)
        os.system(resamplefiles)
        print(eachhdf + ' has finished')
    except:
        # 提示错误信息
        print(eachhdf + 'was wrong')
相关推荐
Gofarlic_oms14 小时前
利用API实现ANSYS许可证管理自动化集成
运维·服务器·开发语言·matlab·自动化·负载均衡
AI+程序员在路上5 小时前
VS Code 完全使用指南:下载、安装、核心功能与 内置AI 编程助手实战
开发语言·人工智能·windows·开源
invicinble5 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
catchadmin5 小时前
使用 PHP TrueAsync 改造 Laravel 协程异步化的可行路径
开发语言·php·laravel
wbs_scy5 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
m0_674294646 小时前
如何编写SQL存储过程性能对比_记录执行时间评估优化效果
jvm·数据库·python
运气好好的6 小时前
怎样开启phpMyAdmin的操作审计日志_记录每条执行的SQL
jvm·数据库·python
郑州光合科技余经理6 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
2401_871492857 小时前
Layui如何修改Layui默认的UI主题颜色(换肤功能实现)
jvm·数据库·python