NMEA Parser for Rust

NMEA Parser on crates.io NMEA Parser on docs.rs

This [Rust] crate aims to cover the most important [AIS] and [GNSS] NMEA 0183 sentences. It supports both class A and B types of AIS.

Usage

Include the following fragment in your Cargo.toml file:

toml [dependencies] nmea-parser = "0.4.0"

The following sample program uses the crate to parse the given NMEA sentence and to print some fields of the resulting data object:

```rust use nmea_parser::*;

let mut p = NmeaParser::new(); let sentences = vec![ "!AIVDM,1,1,,A,H42O55i18tMET00000000000000,26D", "!AIVDM,1,1,,A,H42O55lti4hhhilD3nink000?050,040", "$GAGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*56", ];

for sentence in sentences {
match p.parsesentence(sentence)? { ParsedSentence::VesselDynamicData(vdd) => { println!("MMSI: {}", vdd.mmsi); println!("Speed: {:.1} kts", vdd.sogknots.unwrap()); println!("Heading: {}°", vdd.headingtrue.unwrap()); println!(""); }, ParsedSentence::VesselStaticData(vds) => { println!("MMSI: {}", vds.mmsi); println!("Flag: {}", vds.country().unwrap()); println!("Name: {}", vds.name.unwrap()); println!("Type: {}", vds.shiptype); println!(""); }, ParsedSentence::Gga(gga) => { println!("Source: {}", gga.source); println!("Latitude: {:.3}°", gga.latitude.unwrap()); println!("Longitude: {:.3}°", gga.longitude.unwrap()); println!(""); }, ParsedSentence::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!(""); }, _ => { } } } ```

The program outputs the following lines:

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

Source: Galileo Latitude: 48.117° Longitude: 11.517°

```

Features

The following features are included in the published version of the crate. Details about version history can be found from the [changelog].

|Feature |Description | |-----------------|-----------------------------------------------------------| |AIS sentences |VDM/VDO types 1-3, 5, 18-19 and 24 | |GNSS sentences |GGA, RMC, GSA, GSV, VTG, GLL | |Satellite systems|GPS, GLONASS, Galileo, BeiDou, NavIC and QZSS |

Roadmap

Until version 1.0 refactoring and renaming of crate's code elements is likely to happen. The following table shows the plan to include different sentences in the crate. Prioritisation is based on estimated significance and implementation effort of each of them.

|Version |Category |Goal | |--------|------------|-------------------------------------------------------| |0.5 |AIS |VDM/VDO types 4, 9-17, 21, 27 | |0.6 |GNSS |ALM, DTM, GBS, HDT, ROT, STN, TRF, VBW, ZDA, XTC, XTE | |0.7 |AIS |VDM/VDO types 20, 22, 23, 25, 26 | |0.8 |AIS |VDM/VDO types 6-8 | |1.0 |general |Stable API, optimizations, enhanced documentation | |1.2 |GNSS |AAM, BOD, BWC, R00, RMB, RTE, WPL, ZTG | |1.3 |GNSS |APB, RMA, GRS, GST, MSK, MSS, STN, VBW |

License

This crate is licensed under [Apache 2.0 license] which also includes liability and warranty statements.