python如何处理卫星云图获取亮温值

 更新时间:2023年08月16日 10:43:38   作者:小朱小朱绝不服输  
这篇文章主要介绍了python如何处理卫星云图获取亮温值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

在处理卫星云图hdf文件时,matlab非常好用,但随着python的流行,还是想学习一下python处理卫星云图数据获取亮温值。

我处理数据的前提是:

  • 根据最佳路径数据集,获取经纬度和时间。
  • 根据时间找对应的hdf文件,获取其中的经纬度,然后根据hdf文件中的经度确定是哪颗卫星的。
  • 在全圆盘标对称文件经纬度对照表dat文件获取经纬度时加上相应的经度。
  • 最后根据最佳路径的经纬度获取dat文件中最近格点的经纬度索引,再通过hdf文件获得亮温值。

1.处理hdf文件

import h5py
hdfFile = h5py.File('F:/新建文件夹/Satellite_Imagery/IR_data/韦森特/FY2D_FDI_ALL_NOM_20120723_1945.hdf', 'r')
db1 = hdfFile['/CALChannelIR1']
hw1 = hdfFile['/NOMChannelIR1']
db2 = hdfFile['/CALChannelIR2']
hw2 = hdfFile['/NOMChannelIR2']
db3 = hdfFile['/CALChannelIR3']
hw3 = hdfFile['/NOMChannelIR3']
db4 = hdfFile['/CALChannelIR4']
hw4 = hdfFile['/NOMChannelIR4']
infoh = hdfFile['/NomFileInfo']
a = hdfFile['NomFileInfo'][()]
print(a[0][3])  # 获取纬度
print(a[0][4])  # 获取经度

对于风云卫星的数据格式,可以查阅相应的资料,获取静止气象卫星的数据格式。这里不再详细描述。

亮温值的获取分为四个IR通道和一个可见光通道,不同通道的用处不同,根据自己的需求选取数据。

在这里插入图片描述

对于获取卫星经纬度等数据,需要,根据NomFileInfo的数据集分析。

a = hdfFile['NomFileInfo'][()]
print(a)
[(b'FY2D', b'NOM', b'Nomalized Projection Full Disc Image', 0., 86.5, 35785864., b'fit', 2012, 7, 10, 12, 34, 0, 2012, 7, 23, 19, 45, 1, 2012, 7, 23, 19, 58, 58, 2012, 7, 23, 20, 0, 27, 6378137., 3.5e-05, 0.00014, 298.25722356, b'NOM Fit HDF5')]

对应信息见下图数据集。

获取亮温值:

获取通道1的亮温值,代码如下:

hw = hw1[()]  # 通道IR1,定标表
db = db1[()]  # 获取定标表的值
tb = np.zeros(shape=(2288, 2288))  # 2288*2288的图像每个具体的亮温值
for i in range(2288):
    for j in range(2288):
        if hw[i][j] == 65535 or hw[i][j] == 65534:  # 判断缺省值
            tb[i][j] = 0
        else:
            a = hw[i][j]
            tb[i][j] = db[0][a]
print(tb)
tb = tb.T  # 注意需要转置

2. 处理dat文件

对于FY2气象卫星而言,经纬度查找表文件(NOM_ITG_2288_2288(0E0N)_LE.zip)可以从网上下载。

数据解压之后,里面有三个文件,分别是:

在数据说明文件中,详细说明了经纬度查找表数据的使用方法,同时针对FY2系列卫星的经度进行了说明,由于上述经纬度数据是以中心点为0度经度生成的,所以对于FY2的数据,需要在经度数据上加上卫星所在的经度。

5FY-2G104.5°E
6FY-2H79°E

对于不同的星可以根据hdf文件中的经度,判断对应的查找表的经度。

下面以H星为例,读取dat文件,获取网格经纬度

lonlatfile = 'F:/Satellite_Imagery/Code/NOM_ITG_2288_2288(0E0N)_LE.dat'
    with open(lonlatfile, 'rb') as f:
        #lon_fy = np.fromfile(f, count=2288 * 2288, dtype='float32') + 79  # 先存经度,根据卫星的不同加上对应的经度值
        #lat_fy = np.fromfile(f, count=2288 * 2288, dtype='float32')  # 再存纬度
        data = np.fromfile(f, dtype='float32')
        data = data.reshape([2288, 2288, 2], order='F')
    #lon = lon_fy.reshape([2288, 2288], order='F')
    #lat = lat_fy.reshape([2288, 2288], order='F')
    lon = data[:, :, 0] + 104.5
    lat = data[:, :, 1]

这里需要注意的是,需要先取出来经度,再取出纬度,这是经纬度在dat文件中的存储顺序,然后加上卫星的经度,这里是79,故经度加79,获取经纬度。

# 经度表
[[379. 379. 379. ... 379. 379. 379.]
 [379. 379. 379. ... 379. 379. 379.]
 [379. 379. 379. ... 379. 379. 379.]
 ...
 [379. 379. 379. ... 379. 379. 379.]
 [379. 379. 379. ... 379. 379. 379.]
 [379. 379. 379. ... 379. 379. 379.]]
# 纬度表 
 [[300. 300. 300. ... 300. 300. 300.]
 [300. 300. 300. ... 300. 300. 300.]
 [300. 300. 300. ... 300. 300. 300.]
 ...
 [300. 300. 300. ... 300. 300. 300.]
 [300. 300. 300. ... 300. 300. 300.]
 [300. 300. 300. ... 300. 300. 300.]]

这样就获取了dat文件中的网格经纬度,即2288*2288的对照表,这样根据最佳路径数据集中的经纬度,找到网格中最近的经纬度。

注:因为网格存储的经纬度不是等间距的,所以不能直接近似找最近的点,需要根据角度计算距离,找到网格上离所求经纬度最近的网格点,找到对应的索引值,再根据索引值找到亮温值。

总结

以上就是我通过python读取hdf,dat文件,根据经纬度获取卫星云图的亮温值的过程,仅为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

绘制登陆时的卫星云图亮温值请参考python绘制登陆时的卫星云图(TBB)

相关文章

  • Python装饰器使用接口测试的步骤

    Python装饰器使用接口测试的步骤

    这篇文章主要介绍了Python装饰器使用接口测试的步骤,本文通过具体示例给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • python实现LRU热点缓存及原理

    python实现LRU热点缓存及原理

    LRU算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 。这篇文章主要介绍了python实现LRU热点缓存,需要的朋友可以参考下
    2019-10-10
  • Pytest Fixture参数讲解及使用

    Pytest Fixture参数讲解及使用

    这篇文章主要介绍了Pytest之Fixture参数详解及使用,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Python连续赋值需要注意的一些问题

    Python连续赋值需要注意的一些问题

    这篇文章主要介绍了Python连续赋值需要注意的一些问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 符合语言习惯的 Python 优雅编程技巧【推荐】

    符合语言习惯的 Python 优雅编程技巧【推荐】

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净、整洁、一目了然。这篇文章给大家介绍Python 优雅编程技巧,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • Python自然语言处理库之NLTK库初级教程

    Python自然语言处理库之NLTK库初级教程

    NLTK(Natural Language Toolkit)是一个Python库,用于实现自然语言处理(NLP)的许多任务,NLTK包括一些有用的工具和资源,如文本语料库、词性标注器、语法分析器等,在这篇初级教程中,我们将了解NLTK的基础功能,需要的朋友可以参考下
    2023-08-08
  • 在PyCharm中接入和使用Codex的全面指南

    在PyCharm中接入和使用Codex的全面指南

    本指南全面介绍如何在 PyCharm 中接入和使用 Codex——OpenAI 推出的新一代 AI 编程智能体,本文将覆盖从环境准备、安装配置、验证使用到常见问题排查的完整流程,需要的朋友可以参考下
    2026-05-05
  • Django项目创建及管理实现流程详解

    Django项目创建及管理实现流程详解

    这篇文章主要介绍了Django项目创建及管理实现流程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • python字符串中两个大括号{{}}的使用及说明

    python字符串中两个大括号{{}}的使用及说明

    这篇文章主要介绍了python字符串中两个大括号{{}}的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 使用Python实现遗传算法的完整代码

    使用Python实现遗传算法的完整代码

    这篇文章主要介绍了使用Python实现遗传算法,其本质是一种高效、并行、全局搜索的方法,自适应的控制搜索过程以求得最优解,需要的朋友可以参考下
    2023-03-03

最新评论