专栏首页气象学家Satpy基础系列教程(1)-FY4A AGRI L1数据处理

Satpy基础系列教程(1)-FY4A AGRI L1数据处理

以下文章来源于气象杂货铺 ,作者朝曦dawn

Satpy[1]目前支持的卫星数据[2]有50种(MSG, Himawari 8, GOES-R, MODIS, Sentinel- 1/2/3/5, SNPP等)。

本文以最近朝曦dawn[3]添加的风云4A(FY4A) AGRI L1数据为例。

Notebook[4]已放在GitHub上,供大家学习。


FY4A AGRI L1数据有两种类别:

1.全圆盘

FY4A-_AGRI--_N_DISK_1047E_L1-_FDI-_MULT_NOM_20190807060000_20190807061459_4000M_V0001.HDF

2.中国区

FY4A-_AGRI--_N_REGC_1047E_L1-_FDI-_MULT_NOM_20190807045334_20190807045750_1000M_V0001.HDF

全圆盘标识:DISK , 中国区标识:REGC.

风云数据链接

1.实时数据[5](30天内)及文档

2.历史数据[6] (2018-03-12 -- )

3.FY4A官方应用平台[7]

安装

推荐通过conda安装,简单快捷。

$ conda install -c conda-forge satpy

定标

FY4A AGRI L1有以下三种定标方式:

1.原始数字量化值 (所有通道)

2.反射率 (C01 - C06)

3.辐射率和亮温 (C07 - C14)

读取数据

只需几行即可读取数据:

import os, glob
from satpy.scene import Scene

# 加载FY4A文件
filenames = glob.glob('/xin/data/FY4A/20190807/FY4A-_AGRI*4000M_V0001.HDF')

# 创建scene对象
scn = Scene(filenames, reader='agri_l1')

# 查看可用的通道
scn.available_dataset_names()

输出结果:

['C01',
 'C02',
 'C03',
 'C04',
 'C05',
 'C06',
 'C07',
 'C08',
 'C09',
 'C10',
 'C11',
 'C12',
 'C13',
 'C14',
 'satellite_azimuth_angle',
 'satellite_zenith_angle',
 'solar_azimuth_angle',
 'solar_glint_angle',
 'solar_zenith_angle']

读取指定通道数据:

# 以红外通道为例
ir_channel = 'C12'
scn.load([ir_channel])

绘图

全圆盘图

一行命令即可保存或显示图片:

# 保存到文件
# scn.save_dataset(ir_channel, \
    filename='{sensor}_{name}.png')

# 在notebook中显示
scn.show(ir_channel)

全圆盘真彩色图

首先查看可用的合成选项:

scn.available_composite_names()

输出结果显示,支持真彩图:

['ash',
 'dust',
 'fog',
 'green',
 'green_snow',
 'ir108_3d',
 'ir_cloud_day',
 'natural_color',
 'natural_color_sun',
 'night_background',
 'night_background_hires',
 'overview',
 'overview_sun',
 'true_color']

于是我们可以直接加载真彩色数据并绘图

# 注:这步需要大内存 (取决于cpu核数)
# 可查看FAQ关于内存的讨论:
#    https://satpy.readthedocs.io/en/latest/faq.html

composite = 'true_color'
scn.load([composite])
scn.show(composite)

# scn.save_dataset(composite, \
        filename='{sensor}_{name}.png')

特定区域图

以下以台风利奇马为例。

首先,我们需要定义地图投影和区域,然后将数据投影到该区域上。

方式一

用Pyresample[8]来定义区域。

from pyresample import get_area_def

area_id = 'lekima'

x_size = 549
y_size = 499
area_extent = (-1098006.560556, -967317.140452, \
        1098006.560556, 1026777.426728)
projection = '+proj=laea +lat_0=19.0 +lon_0=128.0 +ellps=WGS84'
description = "Typhoon Lekima"
proj_id = 'laea_128.0_19.0'

areadef = get_area_def(area_id, description, proj_id, projection,x_size, y_size, area_extent)

方式二

用coord2area_def.py[9]程序来直接生成区域定义。

比如用python coord2area_def.py lekima_4km laea 10 28 118 138 4,即可得到之前定义的利奇马区域:

lekima_4km:
  description: lekima_4km
  projection:
    proj: laea
    ellps: WGS84
    lat_0: 19.0
    lon_0: 128.0
  shape:
    height: 499
    width: 549
  area_extent:
    lower_left_xy: [-1098006.560556, -967317.140452]
    upper_right_xy: [1098006.560556, 1026777.426728]

然后将该定义拷贝到$PPP_CONFIG_DIR/areas.yaml中,即可直接调用

# 如果你已经添加区域到areas.yaml中,可直接调用:
os.environ['PPP_CONFIG_DIR'] = '/yin_raid/xin/satpy_config/'
lekima_scene = scn.resample('lekima_4km')

# 否则需要使用之前定义的区域:
# lekima_scene = scn.resample(areadef)
lekima_scene.show(composite)
# lekima_scene.save_dataset(composite, \
        filename='{sensor}_{name}_resampled.png')

如果想利用自定义的colormap来生成图像(如下图),请参阅关于enhancement的notebook(正在忍饿赶稿中)。

References

[1] Satpy: https://satpy.readthedocs.io/en/latest/ [2] 支持的卫星数据: https://satpy.readthedocs.io/en/latest/index.html#reader-table [3] 朝曦dawn: https://dreambooker.site/ [4] Notebook: https://github.com/zxdawn/FY-4/tree/master/satpy/examples [5] 实时数据: https://fy4.nsmc.org.cn/data/en/data/realtime.html [6] 历史数据: http://satellite.nsmc.org.cn/PortalSite/Data/Satellite.aspx [7] FY4A官方应用平台: http://rsapp.nsmc.org.cn/geofy/ [8] Pyresample: http://pyresample.readthedocs.org/ [9] coord2area_def.py: https://github.com/pytroll/satpy/blob/master/utils/coord2area_def.py

本文分享自微信公众号 - 气象学家(Meteorologist2019)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nature Climate Change:气候变化背景下极端干旱对植被生产力的影响

    陆地总初级生产总值(gross primary production, GPP)是全球植被生长和粮食生产的基础,它影响着生态系统碳平衡,在调节大气CO2中发挥着...

    气象学家
  • 基于机器学习的雷暴监测预警技术

    8月3日,一条“沈阳暴雨天降火龙劈向高楼”的消息登上热搜,引发网友热议。据报道,当天下午,沈阳发生强对流天气,雷击导致高压电线起火,瞬间火花四溅。伴随着强对流天...

    气象学家
  • 进展:外雨带驱动热带气旋次眼墙形成的机制研究

    过去几十年,热带气旋的路径预报取得了长足进展。然而,热带气旋的强度,包括快速增强/减弱、强度震荡等,依然是预报中的难点。其中,次眼墙形成和眼墙替换是造成热带气旋...

    气象学家
  • maven依赖冲突以及解决方法

    依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突

    lyb-geek
  • maven依赖冲突以及解决方法

    依赖冲突很经常是类包之间的间接依赖引起的。每个显式声明的类包都会依赖于一些其它的隐式类包,这些隐式的类包会被maven间接引入进来,从而造成类包冲突

    lyb-geek
  • 用python做时间序列预测八:Granger causality test(格兰杰因果检验)

    python的statsmodel包的grangercausalitytests函数中提供了很好的实现。

    程序员一一涤生
  • 总结了一些指针易出错的常见问题(六)

      安全问题与指针误用 声明和初始化指针(初始化失败) 误用指针 释放问题 指针声明: // 宏定义(仅仅是替换) #define PINT int*; PIN...

    互联网金融打杂
  • 私有云将死?还早

    如今的形势是公有云大刀阔斧,私有云悄无声息,因此有传私有云将死,其实言过其实,甚至可以说远没有到那个程度,IDC最新调查表明私有云预计在未来五年中与公有云有相同...

    静一
  • 指针与数组(1)

    C语言中指针算是核心了吧,掌握了指针基本上就掌握的了C语言的精髓,不过要想真正掌握指针,还是需要仔细认真的钻研一番的。这里我就浅谈一下我对指针的理解吧。以下是我...

    HeaiKun
  • C - 指针C语言指针的总结

    xx_Cc

扫码关注云+社区

领取腾讯云代金券