Пример #1
0
            /// <summary>
            /// Set the heading based off the NMEA 2 data.  This will get the NMEA 2 data and
            /// get the heading value from GPHDT or GPRMC sentences.  It will set the heading
            /// to this value.
            /// </summary>
            /// <param name="ensemble">Ensemble to set the value.</param>
            private static void HeadingSourceNmea2(ref DataSet.Ensemble ensemble)
            {
                double heading = 0.0;

                // Check if NMEA 2 data exist
                if (ensemble.IsNmea2DataAvail)
                {
                    // Create a NMEA dataset to decode the data
                    DataSet.NmeaDataSet nmea2 = new DataSet.NmeaDataSet(ensemble.Nmea2Data);

                    // GPHDT
                    if (nmea2.IsGphdtAvail())
                    {
                        heading = nmea2.GPHDT.Heading.DecimalDegrees;
                    }
                    // GPRMC
                    else if (nmea2.IsGprmcAvail())
                    {
                        heading = nmea2.GPRMC.Bearing.DecimalDegrees;
                    }
                }

                // Set the heading
                SetHeading(ref ensemble, (float)heading);
            }
Пример #2
0
        /// <summary>
        /// Decode the group into a line with the ensemble number
        /// and the rest is the GPS data.  Create a NmeaDataSet which
        /// will decode the GPS data and create the dataset.
        /// </summary>
        /// <param name="group">GPS data per ensemble.</param>
        /// <param name="project">Project to add the data to.</param>
        private void DecodeGroup(string group, Project project)
        {
            // Verify the first line contains the ensemble number
            string[] lines = group.Split('\n');

            // Verify data was found
            if (lines.Length > 0)
            {
                // Verify first line
                //if(lines[0].Contains('#'))
                //{
                // Get the ensemble number
                int ensNum = GetEnsNum(lines[0]);

                // Ensembles will always be greater than 0
                if (ensNum > 0)
                {
                    string gpsData = "";

                    // Get the GPS data
                    // Start aver the first line
                    for (int x = 1; x < lines.Length; x++)
                    {
                        gpsData += lines[x];
                    }

                    // Create the dataset
                    DataSet.NmeaDataSet nds = new DataSet.NmeaDataSet(gpsData);

                    // Add the dataset to the ensemble in the project
                    project.UpdateNmeaDataSet(nds, ensNum);
                }
                //}
            }
        }
Пример #3
0
        /// <summary>
        /// Initialize the object.
        /// </summary>
        /// <param name="nmea">RTI NMEA data.</param>
        public Pd0NmeaData(DataSet.NmeaDataSet nmea)
            : base(ID_LSB, ID_MSB, Pd0ID.Pd0Types.NmeaData)
        {
            NmeaStrings = new List <string>();

            DecodeRtiEnsemble(nmea);
        }
Пример #4
0
 /// <summary>
 /// Convert the RTI Amplitude data set to the PD0 Echo Intensity data type.
 /// </summary>
 /// <param name="nmeaDS">RTI Amplitude data set.</param>
 public void DecodeRtiEnsemble(DataSet.NmeaDataSet nmeaDS)
 {
     NmeaStrings = nmeaDS.NmeaStrings;
     GPGGA       = nmeaDS.GPGGA;
     GPGLL       = nmeaDS.GPGLL;
     GPGSA       = nmeaDS.GPGSA;
     GPGSV       = nmeaDS.GPGSV;
     GPHDT       = nmeaDS.GPHDT;
     GPRMC       = nmeaDS.GPRMC;
     GPVTG       = nmeaDS.GPVTG;
     PGRMF       = nmeaDS.PGRMF;
 }
Пример #5
0
        public void TestJson()
        {
            // Generate an Ensemble
            DataSet.Ensemble ensemble = EnsembleHelper.GenerateEnsemble(30);

            // Modify the data
            string nmeaData = "$HEHDT,274.67,T*1F$HEROT,-32.6,A*31$GPGGA,155339.00,3245.44007,N,11719.83271,W,2,09,0.9,-1.1,M,-33.3,M,5.0,0138*50$GPVTG,277.26,T,265.15,M,2.62,N,4.86,K,D*29$GPZDA,155339.00,08,12,2011,00,00*67$GPGSV,3,1,09,02,75,182,50,04,56,053,51,05,08,167,42,09,50,241,48*75$GPGSV,3,2,09,10,24,111,46,12,45,322,47,17,17,063,45,25,15,313,44*71$GPGSV,3,3,09,28,05,121,36,,,,,,,,,,,,*48";

            ensemble.AddNmeaData(nmeaData);
            Assert.IsNotNull(ensemble, "Adcp Data was not properly created.");
            Assert.IsTrue(ensemble.IsNmeaAvail, "Nmea Dataset not created.");
            Assert.IsTrue(ensemble.NmeaData.IsGpggaAvail(), "GGA message not parsed correctly.");
            Assert.IsTrue(ensemble.NmeaData.IsGpvtgAvail(), "VTG message not parsed correctly.");
            Assert.IsTrue(ensemble.NmeaData.IsGpgsvAvail(), "GSV message not parsed correctly.");
            Assert.IsFalse(ensemble.NmeaData.IsGpgllAvail(), "GLL message should not have been found.");
            Assert.IsFalse(ensemble.NmeaData.IsGpgsaAvail(), "GSA message should not have been found.");
            Assert.IsFalse(ensemble.NmeaData.IsGprmcAvail(), "RMC message should not have been found.");
            Assert.IsFalse(ensemble.NmeaData.IsPgrmfAvail(), "PGRMF message should not have been found.");
            Assert.AreEqual(new DotSpatial.Positioning.Latitude("32 45.44007").DecimalDegrees, ensemble.NmeaData.GPGGA.Position.Latitude.DecimalDegrees, 0.0001, "Latitude is not correct");
            Assert.AreEqual(new DotSpatial.Positioning.Latitude("-117 19.83271").DecimalDegrees, ensemble.NmeaData.GPGGA.Position.Longitude.DecimalDegrees, 0.0001, "Longitude is not correct");
            Assert.AreEqual(DotSpatial.Positioning.FixQuality.DifferentialGpsFix, ensemble.NmeaData.GPGGA.FixQuality, "Fix Quality is not correct");
            Assert.AreEqual(9, ensemble.NmeaData.GPGGA.FixedSatelliteCount, "Number of fixed satellites is incorrect.");
            Assert.AreEqual(new DotSpatial.Positioning.Distance(-1.1, DotSpatial.Positioning.DistanceUnit.Meters).Value, ensemble.NmeaData.GPGGA.Altitude.Value, 0.00001, "Altitude is not correct");
            Assert.AreEqual(new DotSpatial.Positioning.Azimuth(277.26), ensemble.NmeaData.GPVTG.Bearing, "True Track Made Good Bearing not correct.");
            Assert.AreEqual(new DotSpatial.Positioning.Speed(2.62, DotSpatial.Positioning.SpeedUnit.Knots), ensemble.NmeaData.GPVTG.Speed, "Speed is not correct.");

            string encoded = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.NmeaData);                                      // Serialize object to JSON

            DataSet.NmeaDataSet decoded = Newtonsoft.Json.JsonConvert.DeserializeObject <DataSet.NmeaDataSet>(encoded);           // Deserialize the JSON

            // Verify the values are the same
            Assert.IsTrue(decoded.IsGpggaAvail(), "GGA message not parsed correctly.");
            Assert.IsTrue(decoded.IsGpvtgAvail(), "VTG message not parsed correctly.");
            Assert.IsTrue(decoded.IsGpgsvAvail(), "GSV message not parsed correctly.");
            Assert.IsFalse(decoded.IsGpgllAvail(), "GLL message should not have been found.");
            Assert.IsFalse(decoded.IsGpgsaAvail(), "GSA message should not have been found.");
            Assert.IsFalse(decoded.IsGprmcAvail(), "RMC message should not have been found.");
            Assert.IsFalse(decoded.IsPgrmfAvail(), "PGRMF message should not have been found.");
            Assert.AreEqual(new DotSpatial.Positioning.Latitude("32 45.44007").DecimalDegrees, decoded.GPGGA.Position.Latitude.DecimalDegrees, 0.0001, "Latitude is not correct");
            Assert.AreEqual(new DotSpatial.Positioning.Latitude("-117 19.83271").DecimalDegrees, decoded.GPGGA.Position.Longitude.DecimalDegrees, 0.0001, "Longitude is not correct");
            Assert.AreEqual(DotSpatial.Positioning.FixQuality.DifferentialGpsFix, decoded.GPGGA.FixQuality, "Fix Quality is not correct");
            Assert.AreEqual(9, decoded.GPGGA.FixedSatelliteCount, "Number of fixed satellites is incorrect.");
            Assert.AreEqual(new DotSpatial.Positioning.Distance(-1.1, DotSpatial.Positioning.DistanceUnit.Meters).Value, decoded.GPGGA.Altitude.Value, 0.00001, "Altitude is not correct");
            Assert.AreEqual(new DotSpatial.Positioning.Azimuth(277.26), decoded.GPVTG.Bearing, "True Track Made Good Bearing not correct.");
            Assert.AreEqual(new DotSpatial.Positioning.Speed(2.62, DotSpatial.Positioning.SpeedUnit.Knots), decoded.GPVTG.Speed, "Speed is not correct.");
        }
Пример #6
0
            /// <summary>
            /// Set the heading based off the ADCP GPS  data.  This will get the ADCP GPS data and
            /// get the heading value from GPHDT or GPRMC sentences.  It will set the heading
            /// to this value.
            /// </summary>
            /// <param name="ensemble">Ensemble to set the value.</param>
            private static void HeadingSourceAdcpGps(ref DataSet.Ensemble ensemble)
            {
                double heading = 0.0;

                // Check if GPS 1 data exist
                if (ensemble.IsAdcpGpsDataAvail)
                {
                    // Create a NMEA dataset to decode the data
                    DataSet.NmeaDataSet adcpGps = new DataSet.NmeaDataSet(ensemble.AdcpGpsData);

                    // GPHDT
                    if (adcpGps.IsGphdtAvail())
                    {
                        heading = adcpGps.GPHDT.Heading.DecimalDegrees;
                    }
                    // GPRMC
                    else if (adcpGps.IsGprmcAvail())
                    {
                        heading = adcpGps.GPRMC.Bearing.DecimalDegrees;
                    }
                }
                else if (ensemble.IsNmeaAvail)
                {
                    // GPHDT
                    if (ensemble.NmeaData.IsGphdtAvail())
                    {
                        heading = ensemble.NmeaData.GPHDT.Heading.DecimalDegrees;
                    }
                    // GPRMC
                    else if (ensemble.NmeaData.IsGprmcAvail())
                    {
                        heading = ensemble.NmeaData.GPRMC.Bearing.DecimalDegrees;
                    }
                }

                // Set the heading
                SetHeading(ref ensemble, (float)heading);
            }
Пример #7
0
        public void TestTiming()
        {
            // Generate an Ensemble
            DataSet.Ensemble ensemble = EnsembleHelper.GenerateEnsemble(30);
            string           nmeaData = "$HEHDT,274.67,T*1F$HEROT,-32.6,A*31$GPGGA,155339.00,3245.44007,N,11719.83271,W,2,09,0.9,-1.1,M,-33.3,M,5.0,0138*50$GPVTG,277.26,T,265.15,M,2.62,N,4.86,K,D*29$GPZDA,155339.00,08,12,2011,00,00*67$GPGSV,3,1,09,02,75,182,50,04,56,053,51,05,08,167,42,09,50,241,48*75$GPGSV,3,2,09,10,24,111,46,12,45,322,47,17,17,063,45,25,15,313,44*71$GPGSV,3,3,09,28,05,121,36,,,,,,,,,,,,*48";

            ensemble.AddNmeaData(nmeaData);

            Stopwatch watch = new Stopwatch();

            // Test Serialize()
            watch = new Stopwatch();
            watch.Start();
            for (int x = 0; x < 1000; x++)
            {
                string encoded = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.NmeaData);
            }
            watch.Stop();
            long resultSerialize = watch.ElapsedMilliseconds;

            // Test Deserialize()
            string encodedd = Newtonsoft.Json.JsonConvert.SerializeObject(ensemble.NmeaData);

            watch = new Stopwatch();
            watch.Start();
            for (int x = 0; x < 1000; x++)
            {
                DataSet.NmeaDataSet decoded = Newtonsoft.Json.JsonConvert.DeserializeObject <DataSet.NmeaDataSet>(encodedd);
            }
            watch.Stop();
            long resultDeserialize = watch.ElapsedMilliseconds;

            Debug.WriteLine(String.Format("Serialize:{0}  Deserialize:{1}", resultSerialize, resultDeserialize));

            Debug.WriteLine("Complete");
        }
Пример #8
0
            /// <summary>
            /// Set the heading based off the NMEA 2 data.  This will get the NMEA 2 data and
            /// get the heading value from GPHDT or GPRMC sentences.  It will set the heading
            /// to this value.
            /// </summary>
            /// <param name="ensemble">Ensemble to set the value.</param>
            private static void HeadingSourceNmea2(ref DataSet.Ensemble ensemble)
            {
                double heading = 0.0;

                // Check if NMEA 2 data exist
                if (ensemble.IsNmea2DataAvail)
                {
                    // Create a NMEA dataset to decode the data
                    DataSet.NmeaDataSet nmea2 = new DataSet.NmeaDataSet(ensemble.Nmea2Data);

                    // GPHDT
                    if (nmea2.IsGphdtAvail())
                    {
                        heading = nmea2.GPHDT.Heading.DecimalDegrees;
                    }
                    // GPRMC
                    else if (nmea2.IsGprmcAvail())
                    {
                        heading = nmea2.GPRMC.Bearing.DecimalDegrees;
                    }
                }

                // Set the heading
                SetHeading(ref ensemble, (float)heading);
            }
Пример #9
0
            /// <summary>
            /// Set the heading based off the ADCP GPS  data.  This will get the ADCP GPS data and
            /// get the heading value from GPHDT or GPRMC sentences.  It will set the heading
            /// to this value.
            /// </summary>
            /// <param name="ensemble">Ensemble to set the value.</param>
            private static void HeadingSourceAdcpGps(ref DataSet.Ensemble ensemble)
            {
                double heading = 0.0;

                // Check if GPS 1 data exist
                if (ensemble.IsAdcpGpsDataAvail)
                {
                    // Create a NMEA dataset to decode the data
                    DataSet.NmeaDataSet adcpGps = new DataSet.NmeaDataSet(ensemble.AdcpGpsData);

                    // GPHDT
                    if (adcpGps.IsGphdtAvail())
                    {
                        heading = adcpGps.GPHDT.Heading.DecimalDegrees;
                    }
                    // GPRMC
                    else if (adcpGps.IsGprmcAvail())
                    {
                        heading = adcpGps.GPRMC.Bearing.DecimalDegrees;
                    }
                }

                // Set the heading
                SetHeading(ref ensemble, (float)heading);
            }