爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 286779|回复: 702

[源代码] PyCINRAD模块处理雷达基数据指南(发布1.7.0版本)(修复经纬度标注问题)

  [复制链接]

新浪微博达人勋

发表于 2019-1-7 19:37:24 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 eeeee 于 2022-3-17 09:13 编辑

原贴http://bbs.06climate.com/forum.p ... tra=page%3D1&page=1由于一些因素变得有点版本混乱,现在重开一贴来详细说明一下这个模块的使用方法。
最新版本请移步GitHub下载,如果这个模块对你有帮助,给个star吧,这也是我继续开发的动力。
https://github.com/CyanideCN/PyCINRAD

PS:如果github很慢,可以尝试gitee的镜像下载
https://gitee.com/CyanideCN/PyCINRAD

安装方法:

  1. pip install cinrad
复制代码
或者:


从GitHub下载下来之后解压,cd到文件夹里面之后运行
  1. python setup.py install
复制代码

在使用过程中有什么问题可以在这个帖子下面问,同时,也欢迎加入模块的开发者行列。
一些使用示例:
https://github.com/CyanideCN/PyCINRAD/blob/master/example/calculation.ipynb
https://github.com/CyanideCN/PyCINRAD/blob/master/example/read%20data.ipynb
https://github.com/CyanideCN/PyCINRAD/blob/master/example/visualization.ipynb

使用交流群:480305660


2019.3.13更新
写了个简易的GUI界面,有兴趣的可以用一下,由于本人实在不擅长写界面,欢迎大家多多改进。
运行main_ui.pyw即可
1.png


gui.zip

3.15 KB, 下载次数: 597, 下载积分: 金钱 -5

评分

参与人数 11金钱 +92 贡献 +8 收起 理由
jingworld + 5 很给力!
gwsct + 4 赞一个!
ahhbqk + 6 很给力!
想亮亮 + 5
伊萱 + 2 很给力!
zx9981 + 20 + 2
wangyongtao0929 + 5 很给力!
fjqxyyj + 5
yqcxm + 10 + 2 赞一个!
zhangqing90 + 10 + 2 很给力!
grug + 20 + 2 很给力!

查看全部评分

本帖被以下淘专辑推荐:

密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2022-3-17 09:00:30 | 显示全部楼层
ahhbqk 发表于 2022-3-15 15:40
抽空花了几天时间详细看了所有的留言,很佩服楼主去认真回复每个留言问题和处理每个BUG。楼主利用业务时间 ...

确实也可以,我之前一直没下定决心弄。刚刚建了个QQ群,如果有兴趣的话可以加一下,群号480305660
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-10-20 11:32:39 | 显示全部楼层
花容天下重莲 发表于 2020-10-19 15:40
老师想请教一下在ppi图下面叠加上剖面图,提示错误:Adding cross section dynamically is not supported i ...

fig = cinrad.visualize.PPI(rl[ele],section=sec,add_city_names=True,style='white') ,我是直接在PPI里加了section就可以了,你试试
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-9-25 16:40:10 | 显示全部楼层
sskkyy2008 发表于 2019-9-24 16:28
请教老师,能否根据给定的某个经度、纬度,把该点的反射率 或者速度 值提取出来???

import cinrad
import numpy as np
from cinrad.io import CinradReader, StandardData
from scipy import spatial
f = CinradReader("C:/Users/gsy/Desktop/RADA_CHN_DOR_L2_O-Z9837-CA-CAP-20190820003000.bin/2017082108000.05V") #老版本数据
f.set_code('Z9816')
f._update_radar_info()
r = f.get_data(0, 230, 'REF')
tree = spatial.KDTree(np.dstack((r.lon.ravel(),r.lat.ravel()))[0])
t2=tree.query(np.array([104.74,31.78]))
#print(t2)
t3=np.unravel_index(t2[1],r.data.shape)
t3=r.data[t3]
print(t3)
密码修改失败请联系微信:mofangbao
回复 支持 3 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-12-16 22:18:51 | 显示全部楼层
zytcerulean 发表于 2019-12-16 14:23
老师,我想在121.64,37.64这个点画一个标志,用上面的语句出图以后这个经纬度不管设置在哪里,最后这个 ...

fig.geoax.plot(121.64, 37.34,marker='o', color='grey', zorder=4, markersize=8, transform=fig.data_crs)
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-7-15 10:30:42 | 显示全部楼层
jack_ln 发表于 2019-7-14 11:20
@eeeee 你好,
画图的过程中遇到下面的问题,
1,画REF,ele = 0时画图正常,ele = 1时提示错误如下图,生 ...

最低的两个仰角分别扫两次,0和2是反射率,1和3是速度
密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2022-11-30 15:33:41 | 显示全部楼层
wolfwang 发表于 2019-1-13 12:10
好的,可以了,谢谢老师!另外计算组合反射率计算是格点数据,但是vil和et计算的lat,lon范围好像是错误 ...

我计算出的CR好像经纬度也是错的,你的是对的吗
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-1-23 07:00:50 | 显示全部楼层
  • 对RHI出图部分作了些优化和修改,增加了横坐标的经纬度标注,同时优化了图片长高比,增加了网格线的绘制。效果图如下:


                                  Z9571_20180304112438_VCS_30.1N119.4E_30.4N120.0E副本.png

                   RHI文件:    rhi.py (3.71 KB, 下载次数: 141)
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-1-7 19:42:07 | 显示全部楼层
本帖最后由 eeeee 于 2020-6-2 13:26 编辑

斜体是模块底层部分
文件读取部分(cinrad.io)
目前cinrad模块支持SA/SB/SC/CA/CB/CC雷达以及新版本标准数据的读取。
  1. import cinrad
  2. f = cinrad.io.CinradReader(radar_file)
  3. f = cinrad.io.StandardData(radar_file)
复制代码
CinradReader读取老版本的数据,StandardData读取新版本标准数据。
获取雷达数据统一都是使用f.get_data(elevation, range, datatype)方法,datatype是数据类型,包括'REF','VEL','SW'以及一些双偏振要素,range是数据的半径,单位是公里,elevation是仰角序号,从零开始计数。
为了减少绘图时传入的参数个数,获取到的数据均为cinrad.datastruct.Radial类型,储存有雷达其他的信息,Radial的data属性就是np.ndarray格式储存的雷达数据

cinrad.io.PUP提供读取PUP数据的功能,读取出来的数据为cinrad.datastruct.Radial格式并且可以用来绘制PPI。目前只支持径向类型的数据。
  1. from cinrad.io import PUP
  2. f = PUP(your_radar_file)
  3. data = f.get_data()
复制代码




要素计算部分(cinrad.calc)
提供VIL,ET和组合反射率以及任意两点剖面的计算。计算这些要素需要传入整个体扫的反射率数据。
  1. rl = [f.get_data(i, 230, 'REF') for i in f.angleindex_r]
复制代码
除了两点剖面计算之外,其他函数返回的数据类型是cinrad.datastruct.Radial或者cinrad.datastruct.Grid(组合反射率)。
  1. vil = cinrad.calc.quick_vil(rl) #计算VIL
  2. et = cinrad.calc.quick_et(rl) #计算ET
  3. cr = cinrad.calc.quick_cr(rl) #计算组合反射率
复制代码


这些函数都是cinrad.utils里面的函数的封装,cinrad.utils里面的函数接受的参数为np.ndarray,详情见函数的注释。

两点剖面的计算由cinrad.calc.VCS类完成,这个类初始化同样需要整层体扫。
  1. vcs = cinrad.calc.VCS(rl)
  2. sec = vcs.get_section(start_cart=(111, 25.5), end_cart=(112, 26.7)) # pass geographic coordinates (latitude, longitude)
  3. sec = vcs.get_section(start_polar=(115, 350), end_polar=(130, 30)) # pass polar coordinates (distance, azimuth)
复制代码
调用VCS.get_section方法获取剖面(为cinrad.datastruct._Slice类型),可以选择传入极坐标也可以传入经纬度。

可视化部分(cinrad.visualize)
PPI图由cinrad.visualize.PPI类来绘制,这个类提供了一个方便的绘图模板。参数为cinrad.datastruct.Grid或者cinrad.datastruct.Radial类型即可,只要是cinrad模块里面的函数生成的数据都可以扔进去画,可选参数总结见下图。
QQ截图20190107195512.png
更新:
新增style参数,控制背景颜色,可设置为'black'或者'white'


  1. ppi = cinrad.visualize.PPI(radial)
  2. ppi('D:\\') #传入保存图片的地址,亦可传入具体图片名
复制代码
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.geoax
这个属性是绘制雷达图的axes,可以在操作这个axes的基础上进行更多自定义操作,例如绘制散点图或者使用其他绘图函数
  1. ppi.geoax.scatter(***)
复制代码


评分

参与人数 1金钱 +30 贡献 +10 收起 理由
二爷名声在外 + 30 + 10 赞一个!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-6-2 13:31:16 | 显示全部楼层
发布1.6.0版本
采用xarray.Dataset作为数据容器
VIL运算有5倍速度提升
支持CR,ET,VIL等PUP文件

cinrad.easycalc重命名为cinrad.calc,请及时修改
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-12-16 14:23:00 | 显示全部楼层
  1. fig = cinrad.visualize.PPI(cr)
  2. fig.geoax.plot(121.64,37.34,marker='o', color='grey', zorder=4, markersize=8)
  3. fig(Dir)
复制代码


老师,我想在121.64,37.64这个点画一个标志,用上面的语句出图以后这个经纬度不管设置在哪里,最后这个点都是标志在雷达站点上。请问是哪里的问题呢?
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-9-24 16:28:13 | 显示全部楼层
请教老师,能否根据给定的某个经度、纬度,把该点的反射率 或者速度 值提取出来???
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-1-7 20:09:02 | 显示全部楼层
一些示例图片
格式工厂Z9200_20180916022401_1.4_230_VEL.png

格式工厂Z9735_20180304120845_0.6_230_REF.png

格式工厂Z9552_20180726113032_0.0_230_ET.png

图片为了方便上传压缩过,模块生成的图片是很高清的。



密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2019-1-8 12:54:08 | 显示全部楼层
本帖最后由 grug 于 2019-1-8 13:07 编辑

楼主给力,我用python3.6版本pip安装cinrad==1.2, from cinrad.io import CinradReader总会显示ModuleNotFoundError: No module named 'cinrad.io._radar_struct'
可以了,pip安装的缺少文件夹_radar_struct
例外问一下,背景颜色怎么把黑色改为白色,添加经纬度坐标线
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-1-8 13:19:02 | 显示全部楼层
本帖最后由 eeeee 于 2019-1-8 13:20 编辑
grug 发表于 2019-1-8 12:54
楼主给力,我用python3.6版本pip安装cinrad==1.2, from cinrad.io import CinradReader总会显示ModuleNotF ...

你可以把cinrad/visualize/basicfunc.py里面setup_plot函数的plt.style.use('dark_background')给注释掉。(我再尝试一下找找有没有更优雅的方法)
PPI里面的ax属性是cartopy的GeoAxes,加经纬度线的话可以通过操作那个axes来实现
密码修改失败请联系微信:mofangbao
回复 支持 0 反对 1

使用道具 举报

新浪微博达人勋

发表于 2019-1-8 14:11:44 | 显示全部楼层
本帖最后由 grug 于 2019-1-8 15:50 编辑

linux系统下运行,FileNotFoundError: [Errno 2] No such file or directory: 'C:\\\\WINDOWS\\\\Fonts\\\\msyh.ttc'找不到对应字体

windows下安装:
pip install cinrad
Collecting cinrad
  Downloading https://files.pythonhosted.org/p ... .2-py3-none-any.whl (22.1MB)
    100% |████████████████████████████████| 22.1MB 150kB/s
Collecting cartopy>=0.15 (from cinrad)
  Downloading https://files.pythonhosted.org/p ... rtopy-0.17.0.tar.gz (8.9MB)
    100% |████████████████████████████████| 8.9MB 91kB/s
  Installing build dependencies ... done
    Complete output from command python setup.py egg_info:
    Proj 4.9.0 must be installed in Conda environment "cinrad".

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-dc9qxcds/cartopy/


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-8 20:34:00 | 显示全部楼层
字体问题已经解决
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2019-1-9 12:26:01 | 显示全部楼层
为你点赞~~
密码修改失败请联系微信:mofangbao
回复

使用道具 举报

新浪微博达人勋

发表于 2019-1-9 23:37:07 | 显示全部楼层
厉害了楼主!!!想请教一下,如果在windows下安装了Cartopy,是不是在Cartopy中直接安装这个模块就可以绘图了?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2019-1-10 00:11:08 | 显示全部楼层
小其其格 发表于 2019-1-9 23:37
厉害了楼主!!!想请教一下,如果在windows下安装了Cartopy,是不是在Cartopy中直接安装这个模块就可以绘 ...

把依赖包装好就可以用了
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表