24#ifndef GOBY_UTIL_AIS_DECODE_H
25#define GOBY_UTIL_AIS_DECODE_H
34#include <boost/algorithm/string/classification.hpp>
35#include <boost/algorithm/string/predicate_facade.hpp>
36#include <boost/algorithm/string/trim.hpp>
37#include <boost/units/base_unit.hpp>
38#include <boost/units/base_units/metric/knot.hpp>
39#include <boost/units/operators.hpp>
40#include <boost/units/systems/angle/degrees.hpp>
41#include <boost/units/systems/si/length.hpp>
65 Decoder(
const std::vector<NMEASentence>& nmeas);
70 bool complete() {
return ais_msg_ !=
nullptr; }
75 return ais_msg_->message_id;
114 std::string trim_ais_string(std::string in)
116 boost::trim_if(in, boost::algorithm::is_space() || boost::algorithm::is_any_of(
"@"));
120 template <
typename LibAisMessage>
131 std::string name = trim_ais_string(ais.name);
135 else if (part_num == 1)
137 std::string callsign = trim_ais_string(ais.callsign);
138 if (!callsign.empty())
150 template <
typename LibAisMessage>
156 metric::knot_base_unit::unit_type knots;
161 if (ais.true_heading >= 0 && ais.true_heading < 360)
171 void decode_position();
172 void decode_voyage();
175 libais::VdmStream ais_stream_decoder_;
176 std::unique_ptr<libais::AisMsg> ais_msg_;
DecoderException(const std::string &what)
bool push(const NMEASentence &nmea)
goby::util::ais::protobuf::Position as_position()
Decoder(const NMEASentence &nmea)
Decoder(const std::vector< NMEASentence > &nmeas)
goby::util::ais::protobuf::Voyage as_voyage()
libais::AisMsg & as_libais_msg()
void set_lon_with_units(Quantity value_w_units)
Position_PositionAccuracy PositionAccuracy
void set_lat_with_units(Quantity value_w_units)
void set_raim(bool value)
void set_position_accuracy(::goby::util::ais::protobuf::Position_PositionAccuracy value)
void set_true_heading_with_units(Quantity value_w_units)
void set_course_over_ground_with_units(Quantity value_w_units)
void set_message_id(int32_t value)
void set_speed_over_ground_with_units(Quantity value_w_units)
static bool PositionAccuracy_IsValid(int value)
void set_mmsi(int32_t value)
void set_report_second_with_units(Quantity value_w_units)
void set_message_id(int32_t value)
void set_to_port_with_units(Quantity value_w_units)
void set_to_stern_with_units(Quantity value_w_units)
static bool ShipType_IsValid(int value)
void set_callsign(ArgT0 &&arg0, ArgT... args)
void set_type(::goby::util::ais::protobuf::Voyage_ShipType value)
void set_to_bow_with_units(Quantity value_w_units)
void set_name(ArgT0 &&arg0, ArgT... args)
void set_to_starboard_with_units(Quantity value_w_units)
void set_mmsi(int32_t value)
The global namespace for the Goby project.