示例#1
0
        public PositioningInformation(string result, PositionDisplayFormatMode mode)
        {
            FormatMode = mode;

            switch (mode)
            {
            case PositionDisplayFormatMode.LongLatLong:
            {
                //+QGPSLOC: <UTC>,<latitude>,<longitude>,<hdop>,<altitude>,<fix>,<cog>,<spkm>,<spkn>,<date>,<nsat>
                var regex = Regex.Match(result, @"\+QGPSLOC: (\d+.\d+),(\d+.\d+),(.),(\d+.\d+),(.),(\d+.\d+),(\d+.\d+),(\d),(\d+.\d+),(\d+.\d+),(\d+.\d+),(\d+),(\d+)");
                if (regex.Groups.Count < 13)
                {
                    throw new Exception("Invalid result from QGPSLOC: " + result);
                }

                //[1] is time (in UTC)
                Latitude            = double.Parse(regex.Groups[2].Value);
                Longitude           = double.Parse(regex.Groups[4].Value);
                HorizontalPrecision = double.Parse(regex.Groups[6].Value);
                Altitude            = double.Parse(regex.Groups[7].Value);
                Fix        = int.Parse(regex.Groups[8].Value);
                Cog        = double.Parse(regex.Groups[9].Value);
                SpeedKM    = double.Parse(regex.Groups[10].Value);
                SpeedKnots = double.Parse(regex.Groups[11].Value);
                //[12] is date (in UTC)
                NumSattelites = int.Parse(regex.Groups[13].Value);

                Date = DateTime.ParseExact(regex.Groups[1].Value + " " + regex.Groups[12].Value, "HHmmss.f ddMMyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
            }
            break;

            case PositionDisplayFormatMode.PositiveNegativeLatLong:
            {
                var regex = Regex.Match(result, @"\+QGPSLOC: (\d+.\d+),(-?\d+.\d+),(-?\d+.\d+),(\d+.\d+),(\d+.\d+),(\d),(\d+.\d+),(\d+.\d+),(\d+.\d+),(\d+),(\d+)");
                if (regex.Groups.Count < 11)
                {
                    throw new Exception("Invalid result from QGPSLOC: " + result);
                }

                //[1] is time (in UTC)
                Latitude            = double.Parse(regex.Groups[2].Value);
                Longitude           = double.Parse(regex.Groups[3].Value);
                HorizontalPrecision = double.Parse(regex.Groups[4].Value);
                Altitude            = double.Parse(regex.Groups[5].Value);
                Fix           = int.Parse(regex.Groups[6].Value);
                Cog           = double.Parse(regex.Groups[7].Value);
                SpeedKM       = double.Parse(regex.Groups[8].Value);
                SpeedKnots    = double.Parse(regex.Groups[9].Value);
                NumSattelites = int.Parse(regex.Groups[11].Value);

                Date = DateTime.ParseExact(regex.Groups[1].Value + " " + regex.Groups[10].Value, "HHmmss.f ddMMyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal);
            }
            break;

            default:
                throw new NotImplementedException();
            }
        }
示例#2
0
        ///// <summary>
        ///// TODO: document
        ///// </summary>
        ///// <param name="deleteType"></param>
        //public void DeleteGNSSAssistanceData(int deleteType)
        //{
        //    SendATCommand("AT+QGPSDEL=" + deleteType);
        //}

        public async Task <PositioningInformation> GetGNSSPositionAsync(PositionDisplayFormatMode mode = PositionDisplayFormatMode.PositiveNegativeLatLong)
        {
            var result = await SendATCommandAsync(new ATCommandWithReply("AT+QGPSLOC=" + (int)mode, "+QGPSLOC: "));

            result.Result.ThrowIfError();
            var response = new PositioningInformation(result.Response, mode);

            return(response);
        }