问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

ERA5再分析资料下载与红黑图处理教程

创作时间:
作者:
@小白创作中心

ERA5再分析资料下载与红黑图处理教程

引用
CSDN
1.
https://blog.csdn.net/weixin_45863084/article/details/137786351

ERA5是欧洲中期天气预报中心(ECMWF)提供的全球再分析数据集,包含了从1950年至今的气象数据。红黑图是一种常用的气象数据可视化方式,通过将数据映射到红黑颜色渐变上,可以直观地展示气象要素的空间分布。本文将详细介绍如何下载ERA5数据并使用Python将其处理成红黑图。

数据下载

ERA5数据可以从Copernicus Climate Data Store网站下载。访问以下链接:

https://cds.climate.copernicus.eu/cdsapp#!/dataset/reanalysis-era5-pressure-levels?tab=form

在下载之前,需要注册并认证网站账号。选择所需的气象要素、时间范围和气压层等参数。需要注意的是,下载的数据格式可以选择GRIB或NetCDF格式。建议保存为NetCDF格式,因为这种格式在Python中处理起来更加方便。

下载后的数据示例如下:

Python数据处理

读取NetCDF数据

使用Python的xarray库可以方便地读取和处理NetCDF格式的数据。以下是一个基本的读取示例:

import xarray as xr

# 打开NetCDF文件
ds = xr.open_dataset('xxxx.nc')

# 打印数据的变量信息
print(ds.variables.keys())

# 获取时间维度
time_dim = ds.coords['time']

# 获取经度和纬度列表值
lon = ds['longitude'].values
lat = ds['latitude'].values

# 获取特定时间的数据
t = '2023-01-01T00:00:00'  # 示例时间点
data = ds.sel(time=t)

# 获取温度数据
temperature_data = data['t'].values

处理数据并生成红黑图

将处理后的数据存储为红黑图,可以保证数据交互的方便性,同时减小存储空间。以下是具体的处理代码:

import numpy as np
from PIL import Image
import os

# 垂直翻转数组(根据获取的数组实际旋转)
data = np.flipud(temperature_data)

minValue = np.nanmin(data)
maxValue = np.nanmax(data)

# 用计算的最大小值来拉伸
fix = (maxValue - minValue) / 256

# 处理无效值
var3Data = np.nan_to_num(data, nan=0)
var3Data[var3Data < minValue] = minValue
var3Data = (var3Data - minValue) / fix
var3Data = np.uint8(var3Data)

# 创建图片的RGB通道
ir = Image.fromarray(var3Data[:])
ig = Image.fromarray(np.array(np.zeros(var3Data.shape), np.uint8)).convert('L')
ib = Image.fromarray(np.array(np.zeros(var3Data.shape), np.uint8)).convert('L')
imjpg = Image.merge('RGB', (ir, ig, ib))

# 翻转图像
flipped_img = imjpg.transpose(method=Image.FLIP_TOP_BOTTOM)

# 定义保存路径
directory_path11 = os.path.dirname(file_path)
directory_path = os.path.dirname(directory_path11) + '\\' + 'era5' + '\\' + element + '\\' + stime
if not os.path.exists(directory_path):  # 如果路径不存在
    os.makedirs(directory_path)  # 则创建该目录

pngfile = directory_path + '\\' + element + '_' + stime + '.png'
flipped_img.save(pngfile, 'png')  # 保存为png

在处理数据的同时,还需要定义相应的JSON文件,以便前端渲染时使用。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号