葵花8号、ec数据的下载与可视化

1 下载

1.1 葵花8、9号

https://blog.csdn.net/twg666/article/details/130495314
按照这篇文章,开vpn,再葵花8号网站注册,获取ftp账号密码,通过filezilla下载数据

1.2 ECWMF数据

ECWMF是欧盟的气象数据,将在24年九月迁移到新网址,新网址分为ads和cds,咱们用的是cds。
https://cds-beta.climate.copernicus.eu/datasets
先注册
选择【ERA5 hourly data on single levels from 1940 to present】数据集,选择想要的时间跨度、地理区域、features,点击request获取
等待一段时间后就可以直接下载,有grib和netCDF4两种格式

2 可视化

踩了很多坑,只写最终可行的方式
难点是安装xarray、cartopy、netcdf4这三个python包,需要至少python3.9

2.1 安装python39

参考 https://blog.csdn.net/weixin_51713776/article/details/109501111
安装环境,py39env 是虚拟环境名:

conda update conda
conda create -n py39env python=3.9

启动环境:

 conda activate py39env 

然后安装xarray、cartopy

 pip install xarray
 pip install cartopy

然后难点来了,xarray需要netCDF4,千万不要直接用pip安装netCDF4,此时关闭vpn,在 https://pypi.tuna.tsinghua.edu.cn/simple/netcdf4/ 中下载合适的包,我下载的1.7版本,试过1.5版本不行,因为1.5版本不支持2.0以上的numpy。
然后pip本地安装netCDF4的wheel文件

安装pygrib:
windows下只能用conda-forge安装,其他方法全部失败

conda install -c conda-forge pygrib

成功

2.2 可视化

参考https://blog.csdn.net/qq_43352337/article/details/139792080?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-4-139792080-blog-105109487.235%5Ev43%5Epc_blog_bottom_relevance_base2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7EPosition-4-139792080-blog-105109487.235%5Ev43%5Epc_blog_bottom_relevance_base2&utm_relevant_index=9

# 导入相关的库
import os
import numpy as np
from xarray import open_dataset, DataArray
import matplotlib.pyplot as plt
from cartopy import crs
from scipy.interpolate import interp1d
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
# 定义文件
filename = r'D:\Satellite_Data\H8DATA\NC_H08_20170311_0500_R21_FLDK.02401_02401.nc'

# 使用xarray读取数据集
dataset = open_dataset(filename)

# 定义研究区域范围
lonmin = 80
lonmax = 140
latmin = 0
latmax = 60

# 读取经纬度信息
lon = dataset['longitude'].loc[lonmin:lonmax]
lat = dataset['latitude'].loc[latmax:latmin]

# 读取反射率数据(R:0.64um, G:0.51um, B:0.47um)
B = dataset['albedo_01'].loc[latmax:latmin, lonmin:lonmax]
G = dataset['albedo_02'].loc[latmax:latmin, lonmin:lonmax]
R = dataset['albedo_03'].loc[latmax:latmin, lonmin:lonmax]

# 通过这种方式读取出来的数据可以直接可视化绘图
B.plot()
plt.show()


# 将三个波段合成为RGB真彩色图像

## 1.对数据拉伸
def stretch(data):
    data = (data - 0) / (1 - 0) * 255
    x = [0, 30, 60, 120, 190, 255]
    y = [0, 110, 160, 210, 240, 255]
    interp = interp1d(x, y, bounds_error=False, fill_value=255)

    return interp(data).astype(int)


B = stretch(B.to_numpy())
G = stretch(G.to_numpy())
R = stretch(R.to_numpy())

RGB = np.dstack((R, G, B)) / 255
Color = RGB.reshape(-1, 3)

## 2.可视化绘图
figure = plt.figure(figsize=(8, 8))
proj = crs.PlateCarree()
ax = figure.add_subplot(111, projection=proj)
ax.coastlines()
ax.pcolormesh(lon, lat, RGB, color=Color, shading="nearest", transform=crs.PlateCarree())
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.set_xticks(np.arange(lonmin, lonmax, 10), crs=proj)
ax.set_yticks(np.arange(latmax, latmin, -10), crs=proj)
plt.tight_layout()
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值