前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >看好了,雷达剖面可以这样画

看好了,雷达剖面可以这样画

作者头像
用户11172986
发布2024-06-20 16:51:22
1600
发布2024-06-20 16:51:22
举报
文章被收录于专栏:气python风雨气python风雨

01、前言

本文旨在探讨两种不同的方法,用于绘制雷达反射率和剖面,通过比较它们的优缺点,以及适用的场景。 我们将介绍这两种方法的实现步骤和代码示例,它们分别是

  1. Py-ART:一个包含了天气雷达算法和程序的Python第三方库。Py-ART一开始被大气辐射测量与气候研究机构(Atmospheric Radiation Measurement (ARM) Climate Research Facility)用来处理来自其降水与云雷达的测量数据,但是现在它已经被设计成可以被其他雷达和气候团队用来检验、处理和分析多种天气雷达数据的库。
  2. PyCINRAD:一个气象雷达开源库,支持中国所有主流雷达格式的读取,并提供一些实用的算法以及可视化。

02、下载与安装雷达库

代码语言:javascript
复制
!pip install pycwr -i https://pypi.mirrors.ustc.edu.cn/simple/
!pip install arm-pyart -i https://pypi.mirrors.ustc.edu.cn/simple/
代码语言:javascript
复制
代码语言:javascript
复制

03、pyart版本

01、导入库与转格式

代码语言:javascript
复制
代码语言:javascript
复制
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from pycwr.io import read_auto
import pyart
import cmaps
PRD = read_auto('/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin')
radar = PRD.ToPyartRadar()
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制

02、数据过滤

代码语言:javascript
复制
代码语言:javascript
复制
#第一行代码创建了一个名为gatefilter的GateFilter对象,
#并将雷达数据radar作为参数传入。GateFilter对象用于过滤雷达数据,
以便在之后的处理中排除不需要的部分。
#第二行代码调用了GateFilter对象的exclude_transition方法,
#这个方法用于排除转换区域的数据,因为在雷达扫描的时候,
#会出现一些转换区域的数据是无效的或者不稳定的,需要被排除掉。
#第三行代码调用了GateFilter对象的exclude_above方法,
#指定了要排除的字段为"reflectivity",并设置了反射率的上限为100。
#这意味着我们将排除雷达反射率超过100的数据点,
#因为这些可能是异常数据或干扰数据,需要进行过滤处理。
gatefilter = pyart.filters.GateFilter(radar)
gatefilter.exclude_transition()
gatefilter.exclude_above("reflectivity", 100)
代码语言:javascript
复制

03、数据格点化

代码语言:javascript
复制
代码语言:javascript
复制
grid = pyart.map.grid_from_radars(
    (radar,),
    gatefilters=(gatefilter,),
   grid_shape=(200, 500, 500),   # 设置了网格的形状为 (200, 500, 500),想计算速度快点可以减少格点数
    grid_limits=( (  0.0,  20000,),(-200000.0, 200000.0),(-200000, 200000.0)), #设置了网格的范围
    grid_origin=(32.2 ,118.7),   # 绘图中心
    fields=["reflectivity"],    # 变量)
代码语言:javascript
复制

04、绘图部分

代码语言:javascript
复制
代码语言:javascript
复制
# 设置起点与终点start = (32, 117.5)end = (33, 118.5)cmap1=cmaps.radar# 绘制雷达反射率fig = plt.figure(figsize=(18, 6))ax1 = plt.subplot(121, projection=ccrs.PlateCarree())display = pyart.graph.GridMapDisplay(grid)display.plot_grid(
    "reflectivity",
    ax=ax1,
    cmap=cmap1,
    vmin=0,
    vmax=70,)# 剖线ax1.scatter(start[1], start[0], color="tab:blue", label="Start")ax1.scatter(end[1], end[0], color="black", label="End")ax1.plot([start[1], end[1]], [start[0], end[0]], color="k", linestyle=":")plt.legend(loc="upper right")# 绘制剖面ax2 = plt.subplot(122)display.plot_cross_section(
    "reflectivity",
    start,
    end,
    x_axis="lat",
    cmap=cmap1,
    vmin=0,
    vmax=70,)plt.show()
代码语言:javascript
复制

04、pycinrad版本

代码语言:javascript
复制
代码语言:javascript
复制
import cinrad
from cinrad.io import CinradReader, StandardData
from cinrad.visualize import PPI, Section
import numpy as np
import matplotlib.pyplot as plt

f = CinradReader("/home/mw/input/data5692/Z_RADR_I_Z9250_20200612054800_O_DOR_SA_CAP.bin")
rl = [f.get_data(i, 150, 'REF') for i in f.angleindex_r]
vcs = cinrad.calc.VCS(rl)
sec = vcs.get_section(start_cart=(117.5, 32), end_cart=(118.5, 33))
fig = PPI(rl[0], dpi=50)
fig.settings['is_inline'] = False
fig.plot_cross_section(sec)
plt.show()
代码语言:javascript
复制
代码语言:javascript
复制

相较而言,pyart绘制雷达剖面方式较为自由,留给使用者很大的操作空间,例如网格化,设置过滤等功能都是值得称赞的 pycinrad则更容易入手,不必考虑太多的参数,这个从代码量即可判断

封面由ai绘制

prompt: color photo of a weather radar in action —c 10 —ar 2:3

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 01、前言
  • 02、下载与安装雷达库
  • 03、pyart版本
    • 02、数据过滤
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档