天擎大数据云平台#
天擎大数据云平台 CMADaaS 使用 MUSIC 接口用于检索数据,提供包括 Python 在内的多种编程语言 SDK,详情请访问天擎门户网站 开发SDK 栏目。
因天擎 MUSIC SDK 仅内网使用,本文介绍仿照 MUSIC SDK 重新实现的 MUSIC Python 接口库 nuwe-cmadaas-python。
安装#
nuwe-cmadaas-python 库尚未发布到 PYPI 中,请从 GitHub 项目库中下载最新代码并使用 pip 安装。 仓库地址: perillaroc/nuwe-cmadaas-python
git clone https://github.com/perillaroc/nuwe-cmadaas-python.git
cd nuwe-cmadaas-python
pip install .
配置#
天擎平台检索数据需要准备账户,并申请资料的访问权限。
创建配置文件 ~/.config/cedarkit.yaml
,配置访问天擎的服务器信息、账户名和密码,类似:
cmadaas:
auth:
user: user name
password: user password
server:
music_server: music server ip
music_port: music server port
music_connTimeout: 3 # connection time out, seconds
music_readTimeout: 3000 # read time out, seconds
music_ServiceId: music service id
详细配置参数信息请查看天擎 MUSIC SDK 示例文件。
准备#
导入需要的包
import xarray as xr
import pandas as pd
from nuwe_cmadaas.model import retrieve_model_grid
设置绘图的数据参数,使用 CMA-MESO 2024 年 4 月 1 日 00 时次 024 时效数据。
天擎数据条目使用“中国气象局区域模式CMA-MESO原始分辨率预报产品(0.03×0.03)”,数据编码“NAFP_GRAPES_MESO_FOR_3KM”。
system_name = "CMA-MESO"
start_time = pd.to_datetime("2024-04-01 00:00:00")
forecast_time = pd.to_timedelta("24h")
CMADAAS_DATA_ID = "NAFP_GRAPES_MESO_FOR_3KM"
加载数据#
加载 2 米温度场
参数解释:
paramter="TEM"
:气温level_type=103
:特定高度层(地面以上),单位米level=2
:2 米
更详细的数据说明请访问天擎门户万战的数据条目。
t_2m_field = retrieve_model_grid(
CMADAAS_DATA_ID,
start_time=start_time,
forecast_time=forecast_time,
parameter="TEM",
level_type=103,
level=2,
) - 273.15
t_2m_field
<xarray.DataArray 'TEM_103' (latitude: 1671, longitude: 2501)> Size: 33MB array([[-0.7265686 , -0.76657715, -0.80655518, ..., -4.17655029, -2.8765625 , -2.95654907], [-3.64655151, -3.65656128, -2.26657715, ..., -6.91657104, -6.31656494, -3.7265686 ], [-3.53656616, -3.57657471, -0.85657349, ..., -7.61655273, -7.4765686 , -3.43656006], ..., [26.59343872, 26.60344849, 26.59343872, ..., 25.80343018, 25.79345093, 25.9734436 ], [26.59343872, 26.60344849, 26.59343872, ..., 25.7734314 , 25.78344116, 26.00344238], [26.58342896, 26.59343872, 26.60344849, ..., 25.78344116, 25.78344116, 25.9734436 ]]) Coordinates: * latitude (latitude) float64 13kB 60.1 60.07 60.04 ... 10.06 10.03 10.0 * longitude (longitude) float64 20kB 70.0 70.03 70.06 ... 144.9 145.0 145.0
绘图#
使用 cedarkit-maps 绘制 2 米温度填充图
Show code cell source
from cedarkit.maps.style import ContourStyle
from cedarkit.maps.chart import Panel
from cedarkit.maps.domains import EastAsiaMapDomain
from cedarkit.maps.colormap import get_ncl_colormap
t_2m_level = [-24, -20, -16, -12, -8, -4, 0, 4, 8, 12, 16, 20, 24, 28, 32]
color_index = [2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102, 112, 122, 132, 142, 152]
t_2m_color_map = get_ncl_colormap("BlAqGrYeOrReVi200", index=color_index)
t_2m_style = ContourStyle(
colors=t_2m_color_map,
levels=t_2m_level,
fill=True,
)
domain = EastAsiaMapDomain()
panel = Panel(domain=domain)
panel.plot(t_2m_field, style=t_2m_style)
domain.set_title(
panel=panel,
graph_name="2m Temperature (C)",
system_name=system_name,
start_time=start_time,
forecast_time=forecast_time,
)
domain.add_colorbar(panel=panel, style=t_2m_style)
panel.show()