以前为了写论文处理雷达数据的时候苦于国内没有合适的开源库,而使用Google搜索的时候清一色基本都是国外的机构和个人开发的雷达数据处理和可视化库。
为了能够利用这些功能强大的工具只能自行往这些库中添加处理国内雷达数据的接口。而这两年不断有一些国内开发者开发的雷达库开源了,比如PyCINRAD。
而现在,由南信大大气物理学院专业雷达团队开发的中国天气雷达数据处理正式开源了!目前不仅支持处理多种国内雷达数据格式,而且还提供了兼容主流雷达开源库的桥梁接口,比如PyART,而PyART中包含了wradlib的桥梁,所以通过此库也可以兼容wradlib。
安装
目前只提供了通过github进行安装的方式:
git clone https://github.com/YvZheng/pycwr.git
cd pycwr
python setup.py install
或者
pip install git+https://github.com/YvZheng/pycwr.git
读取接口及兼容测试
下面我们对pycwr库的不同格式雷达数据处理接口以及PyART的桥梁接口兼容性进行简单的测试。首先我们以常见的SA波段雷达数据进行测试:
SA波段多普勒雷达测试
下面是示例代码:
import numpy as np
import pandas as pd
import xarray as xr
import matplotlib.pyplot as plt
from pycwr.io.auto_io import radar_io
from pycwr.draw.SingleRadarPlot import RadarGraph
from pycwr.draw.SingleRadarPlotMap import RadarGraphMap
filename = "Z_RADR_I_Z9250_20190409022800_O_DOR_SA_CAP.bin"
basedata = radar_io(filename)
PRD = basedata.ToPRD()
graph = RadarGraph(PRD)
graph.plot(0, "dBZ", continuously=True)
0.5度仰角第1层基本反射率
WSR98D C波段双偏振雷达测试
既然是由南信大的团队负责开发的雷达库,那当然少不了WSR98D C波段双偏振雷达的支持,下面是示例代码:
filename = "NUIST.20140928.070704.AR2"
basedata = radar_io(filename)
PRD = basedata.ToPRD()
graph = RadarGraphMap(PRD)
graph.plot(0, "dBZ", continuously=True) ##level 1, "dBZ"
和上述SA波段示例相比,我们使用了RadarGraphMap方法将雷达基本反射率叠加到中国地图上。
注意:pycwr采用了cartopy作为地图绘制工具,而且默认的海岸线精度为50m,因此在绘图的时候需要下载海岸线数据,在国内速度可能会比较慢。
细心的同学可能注意到了上面我们在读取两种格式的雷达数据时,均是使用了 read_io 函数,此方法是从 auto_io 模块导入的函数,可以自动分辨雷达格式。
当然 io 模块也包含了单独处理雷达格式的函数,比如 pycwr.io.SABFile,pycwr.io.WSR98DFile等。
PyART兼容性测试
pycwr的接口中提供了 ToPyartRadar 方法将对象转换为 PyART 的 Radar 对象,从而可以借助 PyART已经拥有的一些模块或函数进行进一步的操作。
目前很多雷达功能库都提供了PyART的兼容,比如用来进行雷达风场反演的PyDDA、SingleDop等。
此外PyART也提供了wradlib的桥梁接口,转换为PyART Radar对象后,也可以转换为wradlib接受的格式,从而利用wradlib的一些功能函数。
下面是示例代码:
import pyart
radar = basedata.ToPyartRadar()
fig, ax = plt.subplots(figsize=(12, 9))
display = pyart.graph.radardisplay.RadarDisplay(radar)
display.plot_ppi("reflectivity", 0, vmin=0, vmax=70)
ax.set_xlim([-100, 100])
ax.set_ylim([-100, 100])
plt.show()
更多功能大家可以自行探索,也可前往官方源查看详细示例。
除了简单的数据处理和可视化外,还提供了attenuation correct 等功能。下图是目前支持的功能,以及未来可能会支持的功能。
当然对于新出现的库而言总是会出现一些小的问题,比如目前的文档还不是很完善,功能交互也有待改善。但对于国内的用户来说这些都是小问题,而且这些也都会逐渐改善。
后话
对于不是专业搞雷达的,单独处理雷达数据时,有很多小细节是很容易被忽略的。以前在添加雷达数据处理接口到PyART时也是出现各种小问题,都不知道如何解决。
现在终于有国内的专业雷达团队开源了中国天气雷达的python库,希望能够为国内的科研工作者、业务单位解决一些专业问题。
欢迎大家下载测试,反馈使用意见,提issues,发PR!