#nmea #gnss #gps #ais

无需std nmea-parser

NMEA 0183解析器,用于AIS和GNSS语句

16个版本 (10个重大更改)

0.11.0 2024年6月13日
0.10.0 2022年10月13日
0.9.0 2022年1月6日
0.8.0 2021年5月26日
0.6.0 2020年11月18日

#7地理空间

Download history 630/week @ 2024-05-02 772/week @ 2024-05-09 586/week @ 2024-05-16 802/week @ 2024-05-23 841/week @ 2024-05-30 334/week @ 2024-06-06 815/week @ 2024-06-13 845/week @ 2024-06-20 621/week @ 2024-06-27 516/week @ 2024-07-04 426/week @ 2024-07-11 535/week @ 2024-07-18 556/week @ 2024-07-25 1034/week @ 2024-08-01 545/week @ 2024-08-08 386/week @ 2024-08-15

每月 2,620次下载
用于 mic2

Apache-2.0

335KB
6.5K SLoC

Rust的NMEA解析器

NMEA Parser on crates.io NMEA Parser on docs.rs GitHub last commit

此Rust crate旨在涵盖所有 AIS 语句和与 NMEA 0183 标准一起使用的最重要的 GNSS 语句。它支持AIS A类和AIS B类。

用法

在您的 Cargo.toml 文件中包含以下片段

[dependencies]
nmea-parser = "0.11.0"

以下示例代码片段使用crate解析给定的NMEA语句并打印一些解析字段。它依赖于 unwrap() 函数以简化示例。在实际应用中需要适当处理 None 情况。

use nmea_parser::*;

// Create parser and define sample sentences
let mut parser = NmeaParser::new();
let sentences = vec![
  "!AIVDM,1,1,,A,H42O55i18tMET00000000000000,2*6D",
  "!AIVDM,1,1,,A,H42O55lti4hhhilD3nink000?050,0*40",
  "$GAGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*56",
];

// Parse the sentences and print some fields of the messages
for sentence in sentences {    
    match parser.parse_sentence(sentence)? {
        ParsedMessage::VesselDynamicData(vdd) => {
            println!("MMSI:    {}",        vdd.mmsi);
            println!("Speed:   {:.1} kts", vdd.sog_knots.unwrap());
            println!("Heading: {}°",       vdd.heading_true.unwrap());
            println!("");
        },
        ParsedMessage::VesselStaticData(vsd) => {
            println!("MMSI:  {}", vsd.mmsi);
            println!("Flag:  {}", vsd.country().unwrap());
            println!("Name:  {}", vsd.name.unwrap());
            println!("Type:  {}", vsd.ship_type);
            println!("");
        },
        ParsedMessage::Gga(gga) => {
            println!("Source:    {}",     gga.source);
            println!("Latitude:  {:.3}°", gga.latitude.unwrap());
            println!("Longitude: {:.3}°", gga.longitude.unwrap());
            println!("");
        },
        ParsedMessage::Rmc(rmc) => {
            println!("Source:  {}",        rmc.source);
            println!("Speed:   {:.1} kts", rmc.sog_knots.unwrap());
            println!("Bearing: {}°",       rmc.bearing.unwrap());
            println!("Time:    {}",        rmc.timestamp.unwrap());
            println!("");
        },
        _ => {
        }
    }
}

示例输出以下行

MMSI:  271041815
Flag:  TR
Name:  PROGUY
Type:  passenger

Source:    Galileo
Latitude:  48.117°
Longitude: 11.517°

特性

以下特性包含在crate的发布版本中。有关版本历史记录的详细信息,请参阅 更改日志

特性 描述
AIS语句 VDM/VDO类型1-5,9-27
GNSS语句 ALM、DBS、DPT、DTM、GGA、GLL、GNS、GSA、GSV、HDT、MTW、MWV、RMC、VTG、MSS、STN、VBW、VHW、ZDA
卫星系统 GPS、GLONASS、Galileo、北斗、NavIC和QZSS

路线图

以下表格概述了未来版本中将包含的高级更改。优先级基于每个项目的估计重要性和实现难度。直到版本1.0,代码元素的重构和重命名可能发生。

版本 分类 内容
0.11 AIS 版本6-8的VDM/VDO类型
1.0 通用 稳定的API,优化,文档改进,更多单元测试,示例
1.1 GNSS AAM, BOD, BWC, R00, RMB, ROT, RTE, WPL, ZTG, APB, GBS, RMA, GRS, GST, MSK, STN, VBW, XTE, XTR

许可证

本软件包遵循Apache 2.0许可证,包括责任和保修声明。

依赖项

~5MB
~86K SLoC