Example #1
0
        public void Rmc()
        {
            var expected = new RMC("SN")
            {
                Status   = Flag.Active,
                Position = new Position()
                {
                    Latitude            = 49.01432,
                    LatitudeHemisphere  = NorthSouth.North,
                    Longitude           = 123.07771,
                    LongitudeHemisphere = EastWest.West,
                },
                SOG = 0.111,
                TMG = 200.928,
                // missing Magnetic Variation
                // missing Magnetic Variation sign
                // missing date and time
            };
            var actual = new RMC("SN", ",A,4900.8592,N,12304.6626,W,0.111,200.928,,0.000,".Split(','));

            Assert.InRange(actual.Position.Latitude, expected.Position.Latitude - .00001, expected.Position.Latitude + .00001);
            Assert.Equal(expected.ToString(), actual.ToString());

            actual = (RMC)MessageBase.Parse("$ECRMC,205351,A,4857.077,N,12303.894,W,4.389,182.020,030416,16.445,E*40");

            Assert.InRange(actual.MagneticVariation, 16.444999, 16.445001);

            // A different real life example. Time has two or three decimals, magnetic variation fields are missing and this is NMEA 2.3, with an extra field D or A.
            actual = (RMC)MessageBase.Parse("$GPRMC,222248.00,A,4857.49084,N,12302.35656,W,3.018,114.14,090416,,,D*7A");
            Assert.NotNull(actual);
        }