• 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

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Tue Nov 14 23:56:18 2023
    4. @author: Asus
    5. """
    6. # -*- coding: utf-8 -*-
    7. """
    8. 调用HEG相关工具批处理MODIS数据
    9. """
    10. import os
    11. # 设置HEG相关环境变量\
    12. os.environ['MRTDATADIR'] = 'D:\\HEG\\HEG_Win\\data'
    13. os.environ['PGSHOME'] = 'D:\\HEG\\HEG_Win\\TOOLKIT_MTD'
    14. os.environ['MRTBINDIR'] = 'D:\\HEG\\HEG_Win\\bin'
    15. # 设置HEG的bin路径
    16. hegpath = 'D:\\HEG\\HEG_Win\\bin'
    17. # 指定处理模块的可执行程序文件路径,此处采用swtif.exe,可以根据具体的处理问题设置
    18. hegdo = os.path.join(hegpath, 'swtif.exe')
    19. # 指定输入数据的路径
    20. inpath = r'E:\MODIS\previous'
    21. # 指定输出数据的路径
    22. outpath = r'E:\MODIS\HEGOUT'
    23. # os.chdir(inpath) #改变当前工作目录到输入数据目录
    24. # 获取当前文件夹下的所有hdf文件
    25. allfiles = os.listdir(inpath)
    26. allhdffiles = []
    27. for eachfile in allfiles:
    28. if os.path.splitext(eachfile)[1] == '.hdf':
    29. if not os.path.exists(outpath+'/'+eachfile.replace(".hdf", "")+'_HEGOUT.tif'):
    30. allhdffiles.append(eachfile)
    31. print('--'*20)
    32. print('文件数量为:', len(allhdffiles), ',所有hdf文件如下')
    33. print(' '+'\n '.join(allhdffiles))
    34. print('--'*20)
    35. # prm文件设置模块,需要首先在HEG工具中生成一个参考的prm文件,示例如下
    36. # 设置prm文件存储路径
    37. prmpath = r"E:\heatflux\evaluateERAandMODIS\mosaic2019\PRM"
    38. #prmpath = prmpath.replace('\\', '/')
    39. for eachhdf in allhdffiles:
    40. prm = ['NUM_RUNS = 1\n',
    41. 'BEGIN\n',
    42. 'INPUT_FILENAME = ' + inpath+'\\'+eachhdf+'\n',
    43. 'OBJECT_NAME = MOD_Swath_Sea_Ice\n',
    44. 'FIELD_NAME = Ice_Surface_Temperature|\n',
    45. 'BAND_NUMBER = 1\n',
    46. 'OUTPUT_PIXEL_SIZE_X = 1000.0\n',
    47. 'OUTPUT_PIXEL_SIZE_Y = 1000.0\n',
    48. 'SPATIAL_SUBSET_UL_CORNER = ( 89.931801 -179.999954 )\n',
    49. 'SPATIAL_SUBSET_LR_CORNER = ( 65.863754 179.999481 )\n',
    50. 'RESAMPLING_TYPE = NN\n',
    51. 'OUTPUT_PROJECTION_TYPE = PS\n',
    52. 'ELLIPSOID_CODE = DEFAULT\n',
    53. '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',
    54. 'OUTPUT_FILENAME = ' + outpath+'\\'+eachhdf.replace(".hdf", "")+'_HEGOUT.tif\n',
    55. 'OUTPUT_TYPE = GEO\n',
    56. 'END\n'
    57. ]
    58. prmfilename = prmpath + '\\' +eachhdf.replace(".hdf", "")+'.prm'
    59. # 这里一定要注意,设定换行符为‘\n’,否则由于在windows系统下默认换行符为‘\r\n’,则无法运行成功
    60. fo=open(prmfilename,'w',newline='\n')
    61. fo.writelines(prm)
    62. fo.close()
    63. for eachhdf in allhdffiles:
    64. prmfilepath = prmpath + '\\' + eachhdf.replace(".hdf", "") + '.prm'
    65. try:
    66. resamplefiles = '{0} -P {1}'.format(hegdo, prmfilepath)
    67. os.system(resamplefiles)
    68. print(eachhdf + ' has finished')
    69. except:
    70. # 提示错误信息
    71. print(eachhdf + 'was wrong')

  • 相关阅读:
    java调用方法之歌唱比赛六个评委打分【0~100分之间的整数】。要求去掉一个最高分和一个最低分后四个评委的平均分即为选手的得分。
    局域网远程yum源制做
    新手使用php7的加密方法来保护代码的安全性
    MindSpore数据集加载-GeneratorDataset功能及常见问题
    主机重启后k8s kubelet无法自动启动问题解决梳理
    国内DNS首选
    钉钉事件订阅AES_KEY解密失败踩坑
    Java SE 19 虚拟线程
    day4作业
    Spring Cloud Alibaba nacos配置中心
  • 原文地址:https://blog.csdn.net/XinemaChen/article/details/134426038