PyCINRAD

May 26, 2026 · View on GitHub

Code style: black Downloads DOI

Decode CINRAD (China New Generation Weather Radar) data and visualize.

查看示例,请访问官网 pycinrad.cn.

读取CINRAD雷达数据,进行相关计算并可视化的模块。

使用交流群:480305660

example文件夹里有详细的使用示例!

安装

安装方法

支持Python 3.9 及以上

pip install cinrad

或在此页面下载并执行

git clone https://github.com/CyanideCN/PyCINRAD.git
cd PyCINRAD
pip install .

模块介绍

cinrad.io

读取CINRAD雷达数据。

例子:

from cinrad.io import CinradReader, StandardData
f = CinradReader(your_radar_file) #老版本数据
f = StandardData(your_radar_file) #新版本标准(相控阵)基数据
f.get_data(tilt, drange, dtype) #获取数据
f.get_raw(tilt, drange, dtype)

对于单层RHI数据,传入get_datatilt参数将会被设置成0。 get_raw方法只会以ndarray的形式返回雷达的数据,不会返回其他的地理信息,因此速度会更快,内存占用更少,在大批量分析数据的时候比较推荐使用此方法。get_data返回的数据类型为xarray.Dataset,因此可以享受xarray模块的便利。xarray.Dataset的文档

例如,可以很轻松的把数据保存成netcdf格式。

>>> data.to_netcdf('1.nc')

xarray的插值也很简单,例如获取方位角300度,距离180km的数据。

>>> data.interp(azimuth=np.deg2rad(300), distance=180)

cinrad.io.StandardData.merge可以合并单仰角的数据,返回一个完整的体扫文件。

转换为pyart.core.Radar类型

cinrad.io.export.standard_data_to_pyart可以将cinrad.io.StandardData转换为pyart.core.Radar

example文件夹里有简单示例。

读取PUP数据和SWAN数据

cinrad.io.PUP提供读取PUP数据的功能,目前只支持径向类型数据以及组合反射率。新格式的PUP产品(ROSE产品)可以用cinrad.io.level3.StandardPUP来读取,目前支持大部分产品。 cinrad.io.SWAN提供相似的接口来解码SWAN数据。

from cinrad.io import StandardPUP
f = StandardPUP(your_radar_file)
data = f.get_data()

读取旧格式相控阵雷达数据

cinrad.io.PhasedArrayData提供读取旧格式的相控阵雷达基数据的功能,用法和其他接口非常类似。

from cinrad.io import PhasedArrayData
f = PhasedArrayData(your_radar_file)
data = f.get_data(0, 40, 'REF')

cinrad.utils

提供雷达衍生产品的计算(接受numpy.ndarray)。将这些功能独立出来的目的是使得计算程序更加通用。

函数名: composite_reflectivity, echo_tops, vert_integrated_liquid

计算ET和VIL时,考虑到速度问题,模块提供由cython转换而来的python扩展,可以大大提升速度。如果要使用此扩展,请安装cython以及C编译器,并重新安装此模块。(由pip直接安装的版本都是带有cython扩展的。)

注:对于当反射率很强时,得到的VIL值可能会很大,这是因为该计算函数没有对强回波进行滤除,算法本身并无问题,如有滤除需要可以先使用np.clip将回波最大值设置为55dBZ再进行计算。

cinrad.calc

提供雷达衍生产品的计算 使用cinrad.io读取的数据可直接带入该模块下的函数来计算。

传入一个包含每个仰角数据的list即可计算。

注:当模块使用编译的C扩展的时候提供VIL密度的计算。

列表生成示例:

r_list = [f.get_data(i, drange, 'REF') for i in f.angleindex_r]
# 或者
r_list = list(f.iter_tilt(230, 'REF'))

VCS

cinrad.calc.VCS用于计算任意两点剖面,目前支持所有要素。

示例代码:

import cinrad
from cinrad.visualize import Section
f = cinrad.io.CinradReader(your_radar_file)
rl = list(f.iter_tilt(230, 'REF'))
vcs = cinrad.calc.VCS(rl)
sec = vcs.get_section(start_cart=(111, 25.5), end_cart=(112, 26.7)) # 传入经纬度坐标
sec = vcs.get_section(start_polar=(115, 350), end_polar=(130, 30)) # 传入极坐标
fig = Section(sec)
fig('D:\\')

雷达拼图

cinrad.calc.GridMapper可以将不同雷达的扫描数据合并成雷达格点拼图,支持基本反射率和组合反射率。

水凝物分类

cinrad.calc.hydro_class从反射率,差分反射率,协相关系数和差分传播相移率计算出10种水凝物类型。

cinrad.correct

提供雷达原数据的校正。

cinrad.correct.dealias

利用pyart的算法进行速度退模糊。(需要C编译器)

import cinrad
#(文件处理部分省略)
v = f.get_data(1, 230, 'VEL')
v_corrected = cinrad.correct.dealias(v)

cinrad.visualize

雷达数据可视化,包括PPISection。如果传入的是自定义的数据,需要符合本模块构建xarray.Dataset的方式,比如坐标和维度的名字,变量的命名,等等。

示例:

from cinrad.visualize import PPI
fig = PPI(R) #绘制基本反射率图片
fig('D:\\') #传入文件夹路径保存图片
from cinrad.visualize import Section
fig = Section(sec) #绘制剖面
fig('D:\\')

如果读取了其他雷达的数据,转换成上文提到的合适的xarray.Dataset类型也可使用此模块画图。 传入的文件路径可以是文件夹路径也可以是文件路径(仅接受以.png结尾的文件路径),如果没有传入路径,程序将会把图片保存在用户目录 (Windows 下称为「个人文件夹」,如 C:\Users\tom)下的PyCINRAD文件夹。

自定义绘图

PPI支持传入其他参数,总结如下。

参数功能
cmap色阶
norm色阶范围
nlabel色阶条标注个数
label色阶条标注
highlight地区边界高亮
dpi分辨率
extent绘图的经纬度范围 e.g. extent=[90, 91, 29, 30]
sectionppi图中绘制的剖面的数据,为xarray.Dataset类型
style背景:黑色black或白色white或透明transparent
add_city_names标注城市名

同时PPI类中定义有其他绘图函数:

PPI.plot_range_rings(self, _range, color='white', linewidth=0.5, **kwargs)

在PPI图上绘制圆圈。

PPI.plot_cross_section(self, data, ymax=None)

在PPI图下方加入VCS剖面图,和vcs参数相似,用此函数还可以自定义y轴的范围。需要注意的是,在%matplotlib inline环境下,不能使用此方法插入剖面。请在实例化PPI时就使用section参数来插入剖面。

fig = cinrad.visualize.PPI(data, section=section_data)
PPI.storm_track_info(self, filepath)

在PPI图上叠加PUP的STI产品。

相关链接

利用PyCINRAD处理、显示天气雷达基数据

引用

如果你在你的论文中使用了本模块,请使用下方的DOI添加引用。

DOI

使用本模块绘制图片的论文

  1. 上海南汇WSR-88D双偏振天气雷达的生物回波识别与分析 doi: 10.16765/j.cnki.1673-7148.2019.03.015

其他

回波顶高及垂直积分液态含水量(密度)算法来源:肖艳姣, 马中元, 李中华. 改进的雷达回波顶高、垂直积分液态水含量及其密度算法[J]. 暴雨灾害, 2009, 28(3):20-24.

水凝物分类算法来源:Dolan, B., S. A. Rutledge, S. Lim, V. Chandrasekar, and M. Thurai, 2013: A Robust C-Band Hydrometeor Identification Algorithm and Application to a Long-Term Polarimetric Radar Dataset. J. Appl. Meteor. Climatol., 52, 2162–2186, https://doi.org/10.1175/JAMC-D-12-0275.1.

如果你对这个模块感兴趣,欢迎加入这个模块的开发者行列!