Ejemplo n.º 1
0
 public Position(string lat, string ns, string lon, string ew)
 {
     Latitude            = ParseNmeaCoordinateElement(lat);
     LatitudeHemisphere  = MessageFormatting.ParseOneLetterEnumByValue <NorthSouth>(ns);
     Longitude           = ParseNmeaCoordinateElement(lon);
     LongitudeHemisphere = MessageFormatting.ParseOneLetterEnumByValue <EastWest>(ew);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Create a new LatLng object to represent a latitude/longitude pair using the
        /// specified datum.
        /// </summary>
        /// <param name="latitudeDegrees">The degrees part of the latitude. Must be 0 &lt;= latitudeDegrees &lt;=
        /// 90.0.</param>
        /// <param name="latitudeMinutes">The minutes part of the latitude. Must be 0 &lt;= latitudeMinutes &lt;
        /// 60.0.</param>
        /// <param name="latitudeSeconds">The seconds part of the latitude. Must be 0 &lt;= latitudeSeconds &lt;
        /// 60.0.</param>
        /// <param name="northSouth">Whether the latitude is north or south of the equator.</param>
        /// <param name="longitudeDegrees">The degrees part of the longitude. Must be 0 &lt;= longitudeDegrees &lt;=
        /// 180.0.</param>
        /// <param name="longitudeMinutes">The minutes part of the longitude. Must be 0 &lt;= longitudeMinutes &lt;
        /// 60.0.</param>
        /// <param name="longitudeSeconds">The seconds part of the longitude. Must be 0 &lt;= longitudeSeconds &lt;
        /// 60.0.</param>
        /// <param name="eastWest">Whether the longitude is east or west of the prime meridian.</param>
        /// <param name="height">The perpendicular height above the reference ellipsoid.</param>
        /// <param name="datum">The datum that this reference is based on.</param>
        /// <exception cref="ArgumentException">if any of the parameters are invalid.</exception>
        public LatLng(int latitudeDegrees, int latitudeMinutes,
                      double latitudeSeconds, NorthSouth northSouth, int longitudeDegrees,
                      int longitudeMinutes, double longitudeSeconds, EastWest eastWest,
                      double height, Datum.Datum datum)
        {
            if (latitudeDegrees < 0.0 || latitudeDegrees > 90.0 ||
                latitudeMinutes < 0.0 || latitudeMinutes >= 60.0 ||
                latitudeSeconds < 0.0 || latitudeSeconds >= 60.0)
            {
                throw new ArgumentException("Invalid latitude");
            }

            if (longitudeDegrees < 0.0 || longitudeDegrees > 180.0 ||
                longitudeMinutes < 0.0 || longitudeMinutes >= 60.0 ||
                longitudeSeconds < 0.0 || longitudeSeconds >= 60.0)
            {
                throw new ArgumentException("Invalid longitude");
            }

            Latitude = (int)northSouth
                       * (latitudeDegrees + (latitudeMinutes / 60.0) + (latitudeSeconds / 3600.0));
            Longitude = (int)eastWest
                        * (longitudeDegrees + (longitudeMinutes / 60.0) + (longitudeSeconds / 3600.0));
            Height = height;
            Datum  = datum;
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Create a new LatLng object to represent a latitude/longitude pair using the
 /// WGS84 datum.
 /// </summary>
 /// <param name="latitudeDegrees">The degrees part of the latitude. Must be 0 &lt;= latitudeDegrees &lt;=
 /// 90.0.</param>
 /// <param name="latitudeMinutes">The minutes part of the latitude. Must be 0 &lt;= latitudeMinutes &lt;
 /// 60.0.</param>
 /// <param name="latitudeSeconds">The seconds part of the latitude. Must be 0 &lt;= latitudeSeconds &lt;
 /// 60.0.</param>
 /// <param name="northSouth">Whether the latitude is north or south of the equator.</param>
 /// <param name="longitudeDegrees">The degrees part of the longitude. Must be 0 &lt;= longitudeDegrees &lt;=
 /// 180.0.</param>
 /// <param name="longitudeMinutes">The minutes part of the longitude. Must be 0 &lt;= longitudeMinutes &lt;
 /// 60.0.</param>
 /// <param name="longitudeSeconds">The seconds part of the longitude. Must be 0 &lt;= longitudeSeconds &lt;
 /// 60.0.</param>
 /// <param name="eastWest">Whether the longitude is east or west of the prime meridian.</param>
 /// <param name="height">The perpendicular height above the reference ellipsoid.</param>
 /// <exception cref="ArgumentException">if any of the parameters are invalid.</exception>
 public LatLng(int latitudeDegrees, int latitudeMinutes,
               double latitudeSeconds, NorthSouth northSouth, int longitudeDegrees,
               int longitudeMinutes, double longitudeSeconds, EastWest eastWest, double height) :
     this(latitudeDegrees, latitudeMinutes, latitudeSeconds, northSouth,
          longitudeDegrees, longitudeMinutes, longitudeSeconds, eastWest, height,
          WGS84Datum.Instance)
 {
 }
Ejemplo n.º 4
0
        public static String ToStringAbv(this EastWest eastWest)
        {
            switch (eastWest)
            {
            case EastWest.East: return("E");

            case EastWest.West: return("W");
            }

            throw new ArgumentException();
        }
Ejemplo n.º 5
0
        /// <inheritdoc />
        protected override void SetIndexValue(int idx, ReadOnlySpan <char> val)
        {
            switch (idx)
            {
            case 0:
                UTCTime = GetTimeSpanFromHHMMSS(val);
                break;

            case 1:
                ActiveStatus = GetActiveStatus(val);
                break;

            case 2:
                Latitude = GetDecimalDegrees(val);
                break;

            case 3:
                NorthSouth = GetNorthSouth(val);
                break;

            case 4:
                Longitude = GetDecimalDegrees(val);
                break;

            case 5:
                EastWest = GetEastWest(val);
                break;

            case 6:
                Knots = GetDecimal(val);
                break;

            case 7:
                TrackAngle = GetDecimal(val);
                break;

            case 8:
                Date = GetDateTimeDDMMYY(val);
                break;

            case 9:
                MagneticVariation = GetDecimal(val);
                break;
            }
        }
Ejemplo n.º 6
0
 public Longitude(double dms, EastWest hemisphere) : base(dms)
 {
     this.Hemisphere = hemisphere;
 }
Ejemplo n.º 7
0
 public Longitude(double dms) : base(dms)
 {
     this.Hemisphere = (dms < 0) ? EastWest.West : EastWest.East;
 }
Ejemplo n.º 8
0
 public Longitude(DMS coord, EastWest hemisphere) : base(coord)
 {
     this.Hemisphere = hemisphere;
 }
Ejemplo n.º 9
0
 public Longitude(Longitude Longitude) : base(Longitude)
 {
     this.Hemisphere = Longitude.Hemisphere;
 }
Ejemplo n.º 10
0
        /// <summary>
        /// Create a new LatLng object to represent a latitude/longitude pair using the
        /// specified datum.
        /// </summary>
        /// <param name="latitudeDegrees">The degrees part of the latitude. Must be 0 &lt;= latitudeDegrees &lt;=
        /// 90.0.</param>
        /// <param name="latitudeMinutes">The minutes part of the latitude. Must be 0 &lt;= latitudeMinutes &lt;
        /// 60.0.</param>
        /// <param name="latitudeSeconds">The seconds part of the latitude. Must be 0 &lt;= latitudeSeconds &lt;
        /// 60.0.</param>
        /// <param name="northSouth">Whether the latitude is north or south of the equator.</param>
        /// <param name="longitudeDegrees">The degrees part of the longitude. Must be 0 &lt;= longitudeDegrees &lt;=
        /// 180.0.</param>
        /// <param name="longitudeMinutes">The minutes part of the longitude. Must be 0 &lt;= longitudeMinutes &lt;
        /// 60.0.</param>
        /// <param name="longitudeSeconds">The seconds part of the longitude. Must be 0 &lt;= longitudeSeconds &lt;
        /// 60.0.</param>
        /// <param name="eastWest">Whether the longitude is east or west of the prime meridian.</param>
        /// <param name="height">The perpendicular height above the reference ellipsoid.</param>
        /// <param name="datum">The datum that this reference is based on.</param>
        /// <exception cref="ArgumentException">if any of the parameters are invalid.</exception>
        public LatLng(int latitudeDegrees, int latitudeMinutes,
            double latitudeSeconds, NorthSouth northSouth, int longitudeDegrees,
            int longitudeMinutes, double longitudeSeconds, EastWest eastWest,
            double height, DotNetCoords.Datum.Datum datum)
        {
            if (latitudeDegrees < 0.0 || latitudeDegrees > 90.0
              || latitudeMinutes < 0.0 || latitudeMinutes >= 60.0
              || latitudeSeconds < 0.0 || latitudeSeconds >= 60.0)
              {
            throw new ArgumentException("Invalid latitude");
              }

              if (longitudeDegrees < 0.0 || longitudeDegrees > 180.0
              || longitudeMinutes < 0.0 || longitudeMinutes >= 60.0
              || longitudeSeconds < 0.0 || longitudeSeconds >= 60.0)
              {
            throw new ArgumentException("Invalid longitude");
              }

              this.latitude = (int)northSouth
              * (latitudeDegrees + (latitudeMinutes / 60.0) + (latitudeSeconds / 3600.0));
              this.longitude = (int)eastWest
              * (longitudeDegrees + (longitudeMinutes / 60.0) + (longitudeSeconds / 3600.0));
              this.height = height;
              this.datum = datum;
        }
Ejemplo n.º 11
0
 /// <summary>
 /// Create a new LatLng object to represent a latitude/longitude pair using the
 /// WGS84 datum.
 /// </summary>
 /// <param name="latitudeDegrees">The degrees part of the latitude. Must be 0 &lt;= latitudeDegrees &lt;=
 /// 90.0.</param>
 /// <param name="latitudeMinutes">The minutes part of the latitude. Must be 0 &lt;= latitudeMinutes &lt;
 /// 60.0.</param>
 /// <param name="latitudeSeconds">The seconds part of the latitude. Must be 0 &lt;= latitudeSeconds &lt;
 /// 60.0.</param>
 /// <param name="northSouth">Whether the latitude is north or south of the equator.</param>
 /// <param name="longitudeDegrees">The degrees part of the longitude. Must be 0 &lt;= longitudeDegrees &lt;=
 /// 180.0.</param>
 /// <param name="longitudeMinutes">The minutes part of the longitude. Must be 0 &lt;= longitudeMinutes &lt;
 /// 60.0.</param>
 /// <param name="longitudeSeconds">The seconds part of the longitude. Must be 0 &lt;= longitudeSeconds &lt;
 /// 60.0.</param>
 /// <param name="eastWest">Whether the longitude is east or west of the prime meridian.</param>
 /// <param name="height">The perpendicular height above the reference ellipsoid.</param>
 /// <exception cref="ArgumentException">if any of the parameters are invalid.</exception>
 public LatLng(int latitudeDegrees, int latitudeMinutes,
     double latitudeSeconds, NorthSouth northSouth, int longitudeDegrees,
     int longitudeMinutes, double longitudeSeconds, EastWest eastWest, double height)
     : this(latitudeDegrees, latitudeMinutes, latitudeSeconds, northSouth,
   longitudeDegrees, longitudeMinutes, longitudeSeconds, eastWest, height,
   WGS84Datum.Instance)
 {
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Based on index value which is the position in the nmea sentence, extract the value to the create type
        /// and set the correct member value
        /// </summary>
        /// <param name="idx">index</param>
        /// <param name="val">raw value</param>
        protected override void SetIndexValue(int idx, ReadOnlySpan <char> val)
        {
            switch (idx)
            {
            case 0:
                UTCTime = GetTimeSpanFromHHMMSS(val);
                break;

            case 1:
                Latitude = GetDecimalDegrees(val);
                break;

            case 2:
                NorthSouth = GetNorthSouth(val);
                break;

            case 3:
                Longitude = GetDecimalDegrees(val);
                break;

            case 4:
                EastWest = GetEastWest(val);
                break;

            case 5:
                FixQuality = GetGPSFix(val);
                break;

            case 6:
                SatsInView = GetInteger(val);
                break;

            case 7:
                HDOP = GetDecimal(val);
                break;

            case 8:
                Altitude = GetDecimal(val);
                break;

            case 9:
                AltitudeUnits = GetUnits(val);
                break;

            case 10:
                GeoidalSeperation = GetDecimal(val);
                break;

            case 11:
                GeoidSeperationUnits = GetUnits(val);
                break;

            case 12:
                AgeOfDGPSData = GetTimeSpanFromHHMMSS(val);
                break;

            case 13:
                DGPStationID = GetString(val);
                break;
            }
        }
 public Side(EastWest side)
 {
     this.side = side;
 }
Ejemplo n.º 14
0
 public Longitude(int degrees, int minutes, double seconds, EastWest hemisphere) : base(degrees, minutes, seconds)
 {
     this.Hemisphere = hemisphere;
 }
Ejemplo n.º 15
0
        protected internal NmeaBurst()
        {
            _Used = false;
            _PointCN = null;
            _CN = null;

            SatellitesSeen = new List<Satellite>();
            SatellitesUsed = new List<Satellite>();
            _time = DateTime.Now;
            _date = DateTime.Now;
            _datetime = DateTime.Now;

            _longitude = -1;
            _latitude = -1;

            _RMC_latitude = -1;
            _RMC_longitude = -1;
            _GGA_latitude = -1;
            _GGA_longitude = -1;

            _latDir = NorthSouth.North;
            _longDir = EastWest.West;

            countGSV = 0;
            totalGSV = 0;
            badData = 0;

            bRMC = false;
            bGGA = false;
            bGSA = false;
            bGSV = false;

            complete = false;
            drop = false;
        }
 public GeoPosition(double latitude, NorthSouth latDir, double longitude, EastWest lonDir, double elevation, UomElevation uomElevation)
     : base(latitude, latDir, longitude, lonDir)
 {
     this.Elevation    = elevation;
     this.UomElevation = uomElevation;
 }
 public GeoPosition(double latitude, NorthSouth latDir, double longitude, EastWest lonDir)
     : base(latitude, latDir, longitude, lonDir)
 {
 }
Ejemplo n.º 18
0
 public Position(double latitude, NorthSouth latDir, double longitude, EastWest lonDir)
 {
     SetPosition(latitude, latDir, longitude, lonDir);
 }
Ejemplo n.º 19
0
        public void Complete()
        {
            string[] fixedPRNs = _fixed_PRNs.Split('_');

            foreach (string prn in fixedPRNs)
            {
                foreach (Satellite sat in SatellitesUsed)
                {
                    if (sat.ID == prn)
                        SatellitesUsed.Add(sat);
                }
            }

            _Z = _altitude;

            if (_RMC_longitude > -1)
                _longitude = _RMC_longitude;
            else
                _longitude = _GGA_longitude;

            if (_RMC_latitude > -1)
                _latitude = _RMC_latitude;
            else
                _latitude = _GGA_latitude;

            _latDir = _RMC_latDir;
            _longDir = _RMC_longDir;

            if (_latitude > -1 && _longitude > -1)
            {
                double lat = -1, lon = -1;

                TtUtils.LatLonDegreeMinDecimalToDegreeDecimal(_latitude, _longitude, out lat, out lon);
                _latitude = lat;
                _longitude = lon;
                //TtUtils.LatLontoUTM(lat, (_longDir == EastWest.West) ? (lon * -1) : (lon), out _Y, out _X, out _utm_zone);
                //_X = (_longDir == EastWest.West) ? (_X * -1) : (_X);
                _Z = this._altitude;
            }
            else
            {
                drop = true;
            }

            _datetime = DateTime.Parse(string.Format("{0}/{1}/{2,4} {3}:{4}:{5}", _date.Month, _date.Day, _date.Year, _time.Hour, _time.Minute, _time.Second));

            complete = true;
        }
Ejemplo n.º 20
0
 public static Longitude fromDecimalDMS(double dms, EastWest hemisphere)
 {
     return(new Longitude(DMS.FromDecimalDMS(dms), hemisphere));
 }
        public override bool Parse(string nmea)
        {
            if (base.Parse(nmea))
            {
                IsValid = false;
                String[] tokens = nmea.Substring(0, nmea.IndexOf("*")).Split(',');

                if (tokens.Length > 12 && tokens[1].Length > 0)
                {
                    try
                    {
                        FixTime = DateTime.ParseExact(
                            $"{tokens[1]} {tokens[9]}",
                            RMCTimeFormatters, CultureInfo.InvariantCulture,
                            DateTimeStyles.None);

                        Status = StatusExtensions.Parse(tokens[2]);

                        Latitude = Latitude.fromDecimalDMS(
                            Double.Parse(tokens[3]),
                            GeoSpatialTypes.ParseNorthSouth(tokens[4])
                            );

                        Longitude = Longitude.fromDecimalDMS(
                            Double.Parse(tokens[5]),
                            GeoSpatialTypes.ParseEastWest(tokens[6])
                            );

                        String token = tokens[7];
                        if (!String.IsNullOrEmpty(token))
                        {
                            GroundSpeed = Double.Parse(token);
                        }

                        token = tokens[8];
                        if (!String.IsNullOrEmpty(token))
                        {
                            TrackAngle = Double.Parse(token);
                        }

                        token = tokens[10];
                        if (!String.IsNullOrEmpty(token))
                        {
                            MagVar = Double.Parse(token);
                        }

                        token = tokens[11];
                        if (!String.IsNullOrEmpty(token))
                        {
                            MagVarDir = GeoSpatialTypes.ParseEastWest(token);
                        }

                        IsValid = true;
                    }
                    catch
                    {
                        //
                    }
                }
            }

            return(IsValid);
        }