Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >雷达系列:两个国产雷达Python库读取对比

雷达系列:两个国产雷达Python库读取对比

作者头像
用户11172986
发布于 2024-06-20 10:29:03
发布于 2024-06-20 10:29:03
1.2K00
代码可运行
举报
文章被收录于专栏:气python风雨气python风雨
运行总次数:0
代码可运行

pycwr与pycinrad读取文件测试

前言

前段时间跟朋友聊了下两个国产雷达库的区别

想了想是不错的素材,遂稍作对比

pycwr和pycinrad都是用于读取和处理气象雷达数据的Python库。 它们的作用是帮助用户方便地读取、处理和分析气象雷达数据,包括反射率、速度和谱宽等信息。 对比这两个库可以让用户更好地了解它们的特点、功能和适用场景,从而更好地选择合适的库来处理气象雷达数据。

SC老格式

In [28]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from cinrad.io import CinradReader, StandardData
f = CinradReader('/home/mw/input/pycwr5461/Z_RADR_I_Z9240_20190703101340_O_DOR_SC_CAP.bin.bz2') #老版本数据,CC雷达最好加上radar_type
f.available_product(0)
代码语言:javascript
代码运行次数:0
运行
复制

Out[28]:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['REF', 'VEL', 'SW', 'azimuth', 'RF']

In [31]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
VEL = f.get_data(0, 230, 'REF')
VEL
代码语言:javascript
代码运行次数:0
运行
复制

Out[31]:

In [57]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pycwr.io import read_auto
PRD = read_auto("/home/mw/input/pycwr5461/Z_RADR_I_Z9240_20190703101340_O_DOR_SC_CAP.bin.bz2")
print(PRD.fields[0])
代码语言:javascript
代码运行次数:0
运行
复制

SAD标准格式

In [23]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g = StandardData('/home/mw/input/pycwr5461/Z_RADR_I_Z9898_20190828181529_O_DOR_SAD_CAP_FMT (1).bin.bz2')
g
代码语言:javascript
代码运行次数:0
运行
复制

Out[23]:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<cinrad.io.level2.StandardData at 0x7f7f921358e0>

In [24]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
g.available_product(0)
代码语言:javascript
代码运行次数:0
运行
复制

Out[24]:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['TREF', 'REF', 'SQI', 'ZDR', 'RHO', 'PHI', 'KDP', 'SNRH']

In [32]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
VEL1 = g.get_data(0, 230, 'REF')
VEL1
代码语言:javascript
代码运行次数:0
运行
复制

Out[32]:

In [26]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PRD = read_auto("/home/mw/input/pycwr5461/Z_RADR_I_Z9898_20190828181529_O_DOR_SAD_CAP_FMT (1).bin.bz2")
print(PRD.fields[0])
代码语言:javascript
代码运行次数:0
运行
复制

相控阵2020格式

In [43]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pycwr.io import read_PA
PRD = read_PA("/home/mw/input/pycwr5461/Z_RADR_I_ZGZ01_20200820220246_O_DOR_DXK_CAR.bin.bz2")
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-43-514a2fb40a87> in <module>
      1 from pycwr.io import read_PA
----> 2 PRD = read_PA("/home/mw/input/pycwr5461/Z_RADR_I_ZGZ01_20200820220246_O_DOR_DXK_CAR.bin.bz2")

/opt/conda/lib/python3.9/site-packages/pycwr/io/__init__.py in read_PA(filename, station_lon, station_lat, station_alt)
     68     :param station_alt:  radar station altitude //units: meters
     69     """
---> 70     return PAFile.PA2NRadar(PAFile.PABaseData(filename, station_lon, station_lat, station_alt)).ToPRD()

/opt/conda/lib/python3.9/site-packages/pycwr/io/PAFile.py in __init__(self, filename, station_lon, station_lat, station_alt)
     29         self._check_standard_basedata()  ##确定文件是standard文件
     30         self.header = self._parse_BaseDataHeader()
---> 31         self.radial = self._parse_radial()
     32         self.nrays = len(self.radial)
     33         # print(self.nrays)

/opt/conda/lib/python3.9/site-packages/pycwr/io/PAFile.py in _parse_radial(self)
     75             self.MomentNum = RadialDict['MomentNumber']
     76             self.LengthOfData = RadialDict['LengthOfData']
---> 77             RadialDict['fields'] = self._parse_radial_single()
     78             if RadialDict["fields"]:
     79                 radial.append(RadialDict)

/opt/conda/lib/python3.9/site-packages/pycwr/io/PAFile.py in _parse_radial_single(self)
     87             Momheader, _ = _unpack_from_buf(Mom_buf, 0, dtype_PA.RadialData())
     88             Data_buf = self.fid.read(Momheader['Length'])
---> 89             assert (Momheader['BinLength'] == 1) | (Momheader['BinLength'] == 2), "Bin Length has problem!"
     90             if Momheader['BinLength'] == 1:
     91                 dat_tmp = (np.frombuffer(Data_buf, dtype="u1", offset=0)).astype(int)

AssertionError: Bin Length has problem!

In [42]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from cinrad.io import PhasedArrayData
p = PhasedArrayData('/home/mw/input/pycwr5461/Z_RADR_I_ZGZ01_20200820220246_O_DOR_DXK_CAR.bin.bz2')
data = p.get_data(0, 100, 'REF')
data
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-42-544a32d2eceb> in <module>
      1 from cinrad.io import PhasedArrayData
----> 2 p = PhasedArrayData('/home/mw/input/pycwr5461/Z_RADR_I_ZGZ01_20200820220246_O_DOR_DXK_CAR.bin.bz2')
      3 data = p.get_data(0, 100, 'REF')
      4 data

/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in __init__(self, file)
    884         except IndexError:
    885             self.code = self.name = "None"
--> 886         self._d = data = np.frombuffer(f.read(), dtype=PA_radial)
    887         self.stationlon = data["header"]["longitude"][0] * 360 / 65535
    888         self.stationlat = data["header"]["latitude"][0] * 360 / 65535

ValueError: buffer size must be a multiple of element size

为什么都读取错误了呢 这里说明一下,由于相控阵的格式经历了多次改变。 此文件是2020年的相控阵文件,较老版本的pycwr应该是能读取的(因为文件就是来自pycwr的测试文件) 笔者测试过,pycinrad可以读取2022年的标准格式相控阵文件 目前pycwr对标的是2023年的格式。

SB格式

In [47]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from cinrad.io import CinradReader, StandardData
SB = CinradReader('/home/mw/input/pycwr5461/Z9396_BASE_SB_20180724_055400 (1).bin.bz2',radar_type='SB') 
SB.available_product(0)
代码语言:javascript
代码运行次数:0
运行
复制

Out[47]:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['REF', 'VEL', 'SW', 'azimuth', 'RF']

In [48]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
VEL = SB.get_data(0, 230, 'REF')
VEL
代码语言:javascript
代码运行次数:0
运行
复制

Out[48]:

In [50]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from pycwr.io import read_auto
PRD = read_auto("/home/mw/input/pycwr5461/Z9396_BASE_SB_20180724_055400 (1).bin.bz2")
print(PRD.fields[0])
代码语言:javascript
代码运行次数:0
运行
复制

In [55]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from cinrad.io import CinradReader, StandardData
CC = CinradReader('/home/mw/input/pycwr5461/Z9396_BASE_SB_20180724_055400 (1).bin.bz2',radar_type='CC') 
CC.available_product(0)
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in __init__(self, file, radar_type)
    124                     f.seek(0)
--> 125                     self._SAB_reader(f, dtype="special")
    126                 except:

/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in _SAB_reader(self, f, dtype)
    153             _header_size = 132
--> 154         data = np.frombuffer(f.read(), dtype=radar_dtype)
    155         start = datetime.datetime(1969, 12, 31)

ValueError: buffer size must be a multiple of element size

During handling of the above exception, another exception occurred:

NotImplementedError                       Traceback (most recent call last)
<ipython-input-55-39e883f9ddb5> in <module>
      1 from cinrad.io import CinradReader, StandardData
----> 2 CC = CinradReader('/home/mw/input/pycwr5461/Z9396_BASE_SB_20180724_055400 (1).bin.bz2',radar_type='CC')
      3 CC.available_product(0)

/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in __init__(self, file, radar_type)
    125                     self._SAB_reader(f, dtype="special")
    126                 except:
--> 127                     raise err
    128         self._update_radar_info()
    129         # TODO: Override information

/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in __init__(self, file, radar_type)
    112             try:
    113                 if self.radartype == "CC":
--> 114                     self._CC_reader(f)
    115                 elif self.radartype in ["SC", "CD"]:
    116                     self._CD_reader(f)

/opt/conda/lib/python3.9/site-packages/cinrad/io/level2.py in _CC_reader(self, f)
    216         scan_mode = header["ucScanMode"][0]
    217         if scan_mode < 100:
--> 218             raise NotImplementedError("Only VPPI scan mode is supported")
    219         stop_angle = scan_mode - 100
    220         self.scantime = (

NotImplementedError: Only VPPI scan mode is supported

In [56]:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PRD = read_auto("/home/mw/input/pycwr5461/2016070817 (1).48V.gz")
print(PRD.fields[0])
代码语言:javascript
代码运行次数:0
运行
复制

看来这种扫描模式的CC格式的雷达pycinrad不支持

小结

总的来说,pycwr的read_auto函数比较无脑,很适合萌新 但是pycinrad有官方qq群,有大佬解惑,

pycwr则是毫无交流的地方

对于其他不能读取的雷达格式,那就只能想办法找到说明书去写一个脚本读取了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
​雷达系列:必须更新!测试cinrad最新更新的read_auto
由于可视化代码过长隐藏,可点击运行Fork查看 🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/07/19
2580
​雷达系列:必须更新!测试cinrad最新更新的read_auto
雷达系列:更新!试试cinrad最新更新的read_auto函数
🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/06/20
3270
雷达系列:更新!试试cinrad最新更新的read_auto函数
利用PyCINRAD处理、显示天气雷达基数据
使用基于Python的PyCINRAD来处理、显示天气雷达基数据,只做简单推介,根据自己需要来选用。版本迭代,建议使用最新版本的PyCINRAD,以及与之相匹配的Python开发环境,避免一些不必要的库不兼容的问题。
MeteoAI
2019/07/30
8.9K1
雷达系列:两种方法将气象雷达数据转为易处理的格式
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/09/12
4010
雷达系列:两种方法将气象雷达数据转为易处理的格式
两个气象雷达库的简单使用
项目地址:https://pycwr.readthedocs.io/en/latest/draw.html
用户11172986
2024/06/20
5460
两个气象雷达库的简单使用
Python 绘制山体阴影+雷达图
本文旨在利用Python编程语言,将山体阴影与雷达速度产品相结合,以探索其可视化效果 环境:python 3.9
用户11172986
2024/06/20
1760
Python 绘制山体阴影+雷达图
看好了,雷达剖面可以这样画
本文旨在探讨两种不同的方法,用于绘制雷达反射率和剖面,通过比较它们的优缺点,以及适用的场景。 我们将介绍这两种方法的实现步骤和代码示例,它们分别是
用户11172986
2024/06/20
8940
看好了,雷达剖面可以这样画
X波段双极化相控阵天气雷达基数据的python读取方法
雷达数据的解析是雷达数据分析应用的基础,前段时间《新一代天气雷达》的作者张深寿老师推送了一篇天气雷达基数据解析的文章《Python读取和显示天气雷达基数据标准格式雷达基数据》,大家都受益匪浅,随着国内双极化相控阵雷达的应用兴起,有许多小伙伴希望我们能够科普双极化相控阵雷达的基数据解析,经过一段时间的整理,现在提供给各位小伙伴。
郭好奇同学
2021/11/10
3.5K1
X波段双极化相控阵天气雷达基数据的python读取方法
雷达系列:两种基于雷达基数据绘制雷达CAPPI图的方式
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/09/20
4941
雷达系列:两种基于雷达基数据绘制雷达CAPPI图的方式
推荐|pycwr-国内优秀天气雷达开源库
以前为了写论文处理雷达数据的时候苦于国内没有合适的开源库,而使用Google搜索的时候清一色基本都是国外的机构和个人开发的雷达数据处理和可视化库。
气象学家
2020/11/06
8.3K0
推荐|pycwr-国内优秀天气雷达开源库
雷达系列:两种雷达库计算HCL产品方法对比
在本文中,我们将对比两种Python雷达库,分别是pycwr和pycinrad,它们用于计算HCL(Hydrometeor Classification)产品的方法。通过对它们的功能、性能、易用性等方面进行比较,我们可以更好地了解它们各自的优势和特点。
用户11172986
2024/06/20
2470
雷达系列:两种雷达库计算HCL产品方法对比
看好了,雷达产品廓线可以这样画
点击以下链接可在线运行Fork查看完整程序 🔜🔜若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/06/20
1840
看好了,雷达产品廓线可以这样画
雷达系列:如何使用python进行多部雷达数据反演风
需要注意的是PyDDA 现在支持使用 Jax 和 TensorFlow 来求解三维风场。PyDDA 需要启用 TensorFlow 2.6 和 TensorFlow 的 tensorflow-probability 包。此外,这两个软件包都可以利用支持 CUDA 的 GPU 来加快处理速度。这两个依赖项是可选的,因为用户仍然可以在 SciPy 生态系统中使用 PyDDA。Jax 优化器使用与 SciPy 的 (L-BFGS-B) 相同的优化器。
用户11172986
2024/08/21
1K0
雷达系列:如何使用python进行多部雷达数据反演风
Linux入门 | 查看文件位置、移动及删除文件
作为科研工作者,熟练掌握Linux操作系统不仅能够提升数据处理、编程开发等任务的效率,更是许多科研软件和计算环境的基础。本文将带你走进Linux的世界,从最基础的命令入手,帮助初学者快速搭建起Linux操作的知识框架,为科研之路打下坚实基础。
用户11172986
2024/06/20
4240
Linux入门 | 查看文件位置、移动及删除文件
GPM卫星数据下载、读取、绘图,一步到位——GPM-API库
由于可视化代码过长隐藏,可点击运行Fork查看 若没有成功加载可视化图,点击运行可以查看 ps:隐藏代码在【代码已被隐藏】所在行,点击所在行,可以看到该行的最右角,会出现个三角形,点击查看即可
用户11172986
2024/09/24
5580
GPM卫星数据下载、读取、绘图,一步到位——GPM-API库
基于 IBTrACS数据的台风路径快速可视化
关注我获取更多学习资料,第一时间收到我的Python学习资料,也可获取我的联系方式沟通合作
用户11172986
2025/03/27
1890
基于 IBTrACS数据的台风路径快速可视化
你爱我还是他 | xarray2024.11.0版本如何读取GRIB数据
近年来,气象数据处理工具链持续演进,xarray在2024.11.0版本中进行了重大更新,正式弃用了传统的PyNio和pygrib引擎,转而全面采用ECMWF开发的cfgrib作为主要GRIB格式解析引擎。
用户11172986
2025/01/22
1500
你爱我还是他 | xarray2024.11.0版本如何读取GRIB数据
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
📢 版权声明:公益性质转载需联系作者本人获取授权。转载本文时,请务必文字注明“来自:和鲸社区:酷炫用户名”,并附带本项目超链接。
用户11172986
2024/11/29
2240
WRFOUT 单层水汽通量散度与整层水汽通量散度实现 2.0
两种降水站点数据克里金插值及可视化方法
gma库是洛大神写的一个地理库, 其中有许多可以使用的函数, 今天简单介绍一下它克里金插值的使用,并与meteva进行对比
用户11172986
2024/06/20
3450
两种降水站点数据克里金插值及可视化方法
震惊!雷达数据绘图居然能白化
有读者私信问想要单独绘制一个省的雷达数据。 实际上是比较容易的,目前cnmaps加上pycinrad即可解决
用户11172986
2024/06/20
1150
震惊!雷达数据绘图居然能白化
推荐阅读
相关推荐
​雷达系列:必须更新!测试cinrad最新更新的read_auto
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验