zoukankan      html  css  js  c++  java
  • python调用HEG工具批量处理MODIS数据

    下面的代码主要用于使用python语言调用NASA官方的MODIS处理工具HEG进行投影坐标转换与重采样批量处理
    主要参考

    1. HEG的用户手册:https://newsroom.gsfc.nasa.gov/sdptoolkit/HEG/HEG215/EED2-TP-030_Rev01_HEG_UsersGuide_2.15.pdf
    2. 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. 生成参数文件写入时一定要注意,设定换行符为‘ ’,fo=open(prmfilename,'w',newline=' '),否则由于在windows系统下默认换行符为‘ ’,程序无法运行成功

    下面是源码分享

    # -*- 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:UserspanDesktopPy_exdatahdf'
    inpath = inpath.replace('\', '/')
    # 指定输出数据的路径
    outpath = r'C:UserspanDesktopPy_exdatahdfout'
    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('  '+'
      '.join(allhdffiles))
    print('--'*20)
    
    # prm文件设置模块,需要首先在HEG工具中生成一个参考的prm文件,示例如下
    # 设置prm文件存储路径
    prmpath = r"C:UserspanDesktopPy_exdatahdfprm"
    prmpath = prmpath.replace('\', '/')
    for eachhdf in allhdffiles:
        prm=['NUM_RUNS = 1
    ',
          'BEGIN
    ',
          'INPUT_FILENAME = ' + inpath+'/'+eachhdf+'
    ',
          'OBJECT_NAME = MODIS_Grid_8Day_1km_LST|
    ',
          'FIELD_NAME = LST_Day_1km
    ',
          'BAND_NUMBER = 1
    ','SPATIAL_SUBSET_UL_CORNER = ( 90.0 -180.0 )
    ',
          'SPATIAL_SUBSET_LR_CORNER = ( -90.0 180 )
    ',
          'RESAMPLING_TYPE = BI
    ',
          'OUTPUT_PROJECTION_TYPE = ALBERS
    ',
          'ELLIPSOID_CODE = WGS84
    ',
          '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  )
    ',
          'OUTPUT_PIXEL_SIZE = 500.0
    ',
          'OUTPUT_FILENAME = ' + outpath+'/'+eachhdf+'_out.tif
    ',
          'OUTPUT_TYPE = GEO
    ',
          'END
    ']
        prmfilename=prmpath +'/'+ eachhdf+'.prm'
        prmfilename=prmfilename.replace('\', '/')
        #这里一定要注意,设定换行符为‘
    ’,否则由于在windows系统下默认换行符为‘
    ’,则无法运行成功
        fo=open(prmfilename,'w',newline='
    ')
        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')
    
  • 相关阅读:
    02
    01
    Redis、Mongo
    Django
    Django
    Django
    Django
    7.2
    Django
    contenttypes
  • 原文地址:https://www.cnblogs.com/yhpan/p/12324465.html
Copyright © 2011-2022 走看看