A python package which handles CINRAD radar data reading and plotting.
读取CINRAD雷达数据,进行相关计算并可视化的模块。
example
文件夹里有详细的使用示例!
Python 3.5 及以上
Cartopy
Metpy
Shapefile
Pyresample
pip install cinrad
或在此页面下载并执行
python setup.py install
构建本模块所使用的数据类型
径向数据类型:cinrad.datastruct.Radial
剖面数据类型: cinrad.datastruct.Slice_
格点数据类型:cinrad.datastruct.Grid
读取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_data
的tilt
参数将会被设置成0。
get_raw
方法只会以ndarray的形式返回雷达的数据,不会返回其他的地理信息,因此速度会更快,内存占用更少,在大批量分析数据的时候比较推荐使用此方法。
cinrad.io.PUP
提供读取PUP数据的功能,读取出来的数据为cinrad.datastruct.Radial
格式并且可以用来绘制PPI。目前只支持径向类型的数据。
cinrad.io.SWAN
提供相似的接口来解码SWAN数据。
from cinrad.io import PUP
f = PUP(your_radar_file)
data = f.get_data()
提供雷达衍生产品的计算(接受numpy.ndarray
)。将这些功能独立出来的目的是使得计算程序更加通用,
而不仅仅是能计算此程序读取出来的CINRAD雷达数据。
函数名:
composite_reflectivity
, echo_tops
, vert_integrated_liquid
计算ET和VIL时,考虑到速度问题,模块提供由cython转换而来的python扩展,可以大大提升速度。如果要使用此扩展,请安装cython以及C编译器,并重新安装此模块。
注:对于当反射率很强时,得到的VIL值可能会很大,这是因为该计算函数没有对强回波进行滤除,程序本身是没有问题的。
提供雷达衍生产品的计算
使用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'))
cinrad.easycalc.VCS
用于计算任意两点剖面,目前支持所有要素。
示例代码:
import cinrad
from cinrad.visualize import Section
f = cinrad.io.CinradReader(your_radar_file)
rl = [f.get_data(i, drange, 'REF') for i in f.angleindex_r]
vcs = cinrad.easycalc.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.easycalc.GridMapper
可以将不同雷达的扫描数据合并成雷达格点拼图。
提供雷达原数据的校正。
利用pyart
的算法进行速度退模糊。(需要C编译器)
import cinrad
#(文件处理部分省略)
v = f.get_data(1, 230, 'VEL')
v_corrected = cinrad.correct.dealias(v)
雷达数据可视化,包括PPI
和Section
以及RHI
,仅接受cinrad.datastruct
包含的类型。
例子:
from cinrad.visualize import PPI
fig = PPI(R) #绘制基本反射率图片
fig('D:\\') #传入文件夹路径保存图片
from cinrad.visualize import Section
fig = Section(Slice_) #绘制VCS
fig('D:\\')
from cinrad.visualize import RHI
fig = RHI(rhi) #绘制RHI扫描模式的数据
fig('D:\\')
如果读取了其他雷达的数据,转换成cinrad.datastruct.Radial
即可使用此模块画图,详见example
下的read_nexrad_level3_velocity.py
传入的文件路径可以是文件夹路径也可以是文件路径(仅接受以.png
结尾的文件路径),如果没有传入路径,程序将会把图片保存在用户目录
(Windows 下称为「个人文件夹」,如 C:\Users\tom
)下的PyCINRAD
文件夹。
PPI
支持传入其他参数,总结如下。
参数 | 功能 |
---|---|
cmap |
色阶 |
norm |
色阶范围 |
nlabel |
色阶条标注个数 |
label |
色阶条标注 |
highlight |
地区边界高亮 |
dpi |
分辨率 |
extent |
绘图的经纬度范围 e.g. extent=[90, 91, 29, 30] |
section |
在ppi 图中绘制的Slice_ 的数据 |
style |
背景颜色,可设置为黑色black 或者白色white |
add_city_names |
标注城市名 |
同时PPI
类中定义有其他绘图函数:
在PPI图上绘制圆圈。
在PPI图下方加入VCS剖面图,和vcs
参数相似,用此函数还可以自定义y轴的范围。
在PPI图上叠加PUP的STI产品。
回波顶高及垂直积分液态含水量(密度)算法来源:肖艳姣, 马中元, 李中华. 改进的雷达回波顶高、垂直积分液态水含量及其密度算法[J]. 暴雨灾害, 2009, 28(3):20-24.
如果你对这个模块感兴趣,欢迎加入这个模块的开发者行列!
同时,如在使用该模块时有任何问题和建议,可以提Issue,也可以发邮件给我 [email protected]