Skip to content

Latest commit

 

History

History
196 lines (132 loc) · 5.9 KB

README_zh.md

File metadata and controls

196 lines (132 loc) · 5.9 KB

PyCINRAD

Codacy Badge

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

构建本模块所使用的数据类型

径向数据类型:cinrad.datastruct.Radial

剖面数据类型: cinrad.datastruct.Slice_

格点数据类型:cinrad.datastruct.Grid

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的形式返回雷达的数据,不会返回其他的地理信息,因此速度会更快,内存占用更少,在大批量分析数据的时候比较推荐使用此方法。

读取PUP数据和SWAN数据

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()

cinrad.utils

提供雷达衍生产品的计算(接受numpy.ndarray)。将这些功能独立出来的目的是使得计算程序更加通用, 而不仅仅是能计算此程序读取出来的CINRAD雷达数据。

函数名: composite_reflectivity, echo_tops, vert_integrated_liquid

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

注:对于当反射率很强时,得到的VIL值可能会很大,这是因为该计算函数没有对强回波进行滤除,程序本身是没有问题的。

cinrad.easycalc

提供雷达衍生产品的计算 使用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.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可以将不同雷达的扫描数据合并成雷达格点拼图。

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以及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.plot_range_rings(self, _range, color='white', linewidth=0.5, **kwargs)

在PPI图上绘制圆圈。

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

在PPI图下方加入VCS剖面图,和vcs参数相似,用此函数还可以自定义y轴的范围。

PPI.storm_track_info(self, filepath)

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

其他

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

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

同时,如在使用该模块时有任何问题和建议,可以提Issue,也可以发邮件给我 [email protected]