4个版本

0.1.0-rc12024年8月12日
0.0.3 2023年10月1日
0.0.2 2023年9月30日
0.0.1 2023年9月28日

#140 in 压缩

Download history 9/week @ 2024-05-19 1/week @ 2024-05-26 31/week @ 2024-06-02 19/week @ 2024-06-09 24/week @ 2024-06-16 5/week @ 2024-06-23 1/week @ 2024-07-28 14/week @ 2024-08-04 102/week @ 2024-08-11

每月下载117次

MIT许可证

7KB

NEXRAD

Crate Docs.rs Rust CI Rust CD

NEXRAD WSR-88D天气雷达数据的解码和下载函数。

摘要

此库提供了NEXRAD存档II级数据的数据结构和解码功能。可选地,它还提供了NOAA上传到AWS的近实时数据的解压缩和下载功能。

NEXRAD系统为北美和其他地区提供高分辨率天气雷达数据。这些雷达的数据被处理并在II级提供,其中包含基本数据,以及III级,其中包含许多派生“产品”。II级是可用的最高分辨率数据,包括基本数据(反射率、平均径向速度和谱宽)以及双极化变量(差分反射率、相关系数和差分相位)。

II级数据通过NOAA ICD 2620010H描述的存档II接口提供。ICD的第7节指定了此API的格式。该数据格式通过Unidata Local Data Manager(LDM)软件分发。数据组织成“卷”(包含二进制数据的文件),每个卷包含多个压缩的“LDR记录”,每个记录包含对应于雷达径向/射线的“消息”,其中包含对应的数据和参数。

An EF4 tornado near Des Moines, IA on March 5, 2022 rendered using this library's 'render' example.

使用此库的“render”示例渲染的2022年3月5日爱荷华州迪莫因附近EF4级龙卷风。

下载

可以启用download功能从AWS下载NEXRAD存档II数据。有关此数据源的信息,请参阅开放数据注册的页面。雷达旋转或“扫描”时收集数据,这些数据被汇总到消息中。消息被分成5分钟的“块”,然后被压缩并上传到AWS。

数据按站点和日期组织。以下是从KDMX下载2023年4月6日第一个文件的示例

let site = "KDMX";
let date = NaiveDate::from_ymd_opt(2023, 4, 6).expect("is valid date");

let metas = list_files(site, &date).await?;
if let Some(meta) = metas.first() {
    println!("Downloading {}...", meta.identifier());
    let downloaded_file = download_file(meta).await?;
    
    println!("Data file size (bytes): {}", downloaded_file.len());
    println!("Data file is compressed: {}", is_compressed(downloaded_file));
} else {
    println!("No files found for the specified date/site to download.");
}

在此示例中,list_files被用于查询指定站点和日期可用的文件,而download_file则用于下载第一个文件的内容。下载的文件需要在检查数据之前进行解压缩和解码。

解压缩

原始数据文件使用bzip2进行压缩,必须在解码之前进行解压缩。以下是一个解压缩文件的示例

let compressed_file = ...;

println!("Data file size (bytes): {}", compressed_file.data().len());
println!("Data file is compressed: {}", compressed_file.compressed());

let decompressed_file = decompress_file(&compressed_file)?;
println!("Decompressed data file size (bytes): {}", decompressed_file.data().len());
println!("Decompressed data file is compressed: {}", decompressed_file.compressed());

解码

解压缩后的数据文件由包含扫描数据的二进制编码消息组成。以下是一个解码文件的示例

let decompressed_file = ...;

let decoded = decode_file(&decompressed_file)?;
println!("Decoded file with {} elevations.", decoded.elevation_scans().len());

渲染

使用 render 示例可以将下载的文件渲染成图片。以下是一个使用示例和结果。

cargo run --example render KDMX20220305_233003_V06

致谢

在开发这个库时,我参考了以下资源:

NOAA NCEI,NEXRAD 系统和产品描述及访问信息:[链接](https://www.ncei.noaa.gov/products/radar/next-generation-weather-radar)

NOAA NWS,雷达操作中心,NEXRAD WSR-88D 第二级数据信息:[链接](https://www.roc.noaa.gov/wsr88d/level_ii/level2info.aspx)

NOAA NWS,雷达操作中心,NEXRAD WSR-88D 接口控制文档:[链接](https://www.roc.noaa.gov/wsr88d/BuildInfo/Files.aspx)

NASA TRMM,雷达软件库:[链接](https://trmm-fc.gsfc.nasa.gov/trmm_gv/software/rsl/)

Brian Wigginton,NEXRAD 第二级解码的 Go 实现:[链接](https://github.com/bwiggs/go-nexrad)

依赖

~280–740KB
~17K SLoC