Exemplo n.º 1
0
        /// <summary>
        /// GNSS导航文件的读取
        /// </summary>
        /// <param name="navFilePath"></param>
        /// <returns></returns>
        public MixedNavFile ReadGnssNavFlie()
        {
            MixedNavFile f = new MixedNavFile();

            f.SetHeader(ParamNavFileReader.ReadHeader(RinexFileName));
            //测试版本
            if (f.Header.Version == 0)
            {
                using (StreamReader sr = new StreamReader(RinexFileName, UnicodeEncoding.UTF8))
                {
                    RinexUtil.SkipHeader(sr);
                }
            }

            using (StreamReader sr = new StreamReader(RinexFileName, UnicodeEncoding.UTF8))
            {
                RinexUtil.SkipHeader(sr);

                if (f.Header.Version < 3.0)
                {
                    while (sr.Peek() != -1)
                    {
                        EphemerisParam record = ParamNavFileReader.ReadRecordV2(sr, f.Header);
                        f.Add(record);
                    }
                }
                else if (f.Header.Version >= 3.0 && f.Header.Version < 4.0)
                {
                    while (sr.Peek() != -1)
                    {
                        string line = sr.ReadLine();
                        if (string.IsNullOrWhiteSpace(line))
                        {
                            continue;
                        }
                        SatClockBias recordHeader = ParamNavFileReader.ParseFirstLineV3(line, f.Header);
                        //轨道参数
                        var satType = recordHeader.Prn.SatelliteType;
                        if (EphemerisUtil.IsEphemerisParam(satType))
                        {
                            var record = new EphemerisParam(recordHeader);

                            ParamNavFileReader.ReadRecordBodyV3(sr, record);

                            f.Add(record);
                        }
                        else
                        {
                            var record2 = new GlonassNavRecord(recordHeader);
                            GlonassNaviFileReader.ParseFirstLineV3(line, record2);
                            GlonassNaviFileReader.ReadRecordBodyV3(sr, record2);
                            f.Add(record2);
                        }
                    }
                }
            }

            return(f);
        }
Exemplo n.º 2
0
 protected override void dataProvider_EphemerisInfoReceived(EphemerisParam obj)
 {
     if (obj == null)
     {
         return;
     }
     NavFile.Add(obj);
 }
Exemplo n.º 3
0
        /// <summary>
        /// GPS 实时星历信息转换。
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public EphemerisParam GetEphemerisParam(Message1019 msg)
        {
            EphemerisParam para = new EphemerisParam();

            para.Prn = new SatelliteNumber((int)msg.SatelliteID, SatelliteType.G);

            #region 开普勒轨道根数 kepler elements
            para.Toc               = msg.Toc * 16;
            para.Toe               = msg.Toe * 16;
            para.SqrtA             = msg.SqrtA * RtcmConst.P2_19;
            para.Eccentricity      = msg.Eccentricity * RtcmConst.P2_33;
            para.Inclination       = msg.I0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.LongOfAscension   = msg.Omega0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.ArgumentOfPerigee = msg.ArgumentOfPerigee * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.MeanAnomaly       = msg.M0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            #endregion

            #region 轨道摄动参数 perturbation parameters
            para.DeltaN = msg.DeltaN * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            para.EyeDot = msg.Idot * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            //??
            para.OmegaDot = msg.OmegaDot * RtcmConst.SemiCircleToRad * RtcmConst.P2_43;
            para.Cuc      = msg.Cuc * RtcmConst.P2_29;
            //??
            para.Cus = msg.Cus * RtcmConst.P2_29;
            para.Crc = msg.Crc * RtcmConst.P2_5;
            //??
            para.Crs = msg.Crs * RtcmConst.P2_5;
            //??
            para.Cic = msg.Cic * RtcmConst.P2_29;
            //??
            para.Cis = msg.Cis * RtcmConst.P2_29;
            #endregion

            #region other satData
            para.IODE        = msg.Iode;
            para.CodesL2     = msg.CodeOnL2;
            para.GPSWeeks    = GetAbsoluteWeekNumber((int)msg.WeekNumber);
            para.L2PDataFlag = msg.L2PDataFlag;
            para.SVAccuracy  = msg.SvAccuracy;
            para.SVHealth    = msg.SvHealth;
            para.TGD         = msg.Tgd * RtcmConst.P2_31;
            para.IODC        = msg.Iodc;
            //??
            para.TTM = 0;
            //??
            para.FitInterval = msg.FitInterval;/* 0:4hr,1:>4hr */
            #endregion

            #region clock
            para.ClockBias  = msg.Af0 * RtcmConst.P2_31;
            para.ClockDrift = msg.Af1 * RtcmConst.P2_43;
            para.DriftRate  = msg.Af2 * RtcmConst.P2_55;
            para.Time       = new Time(para.GPSWeeks, para.Toe);
            #endregion
            return(para);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 构建历元数据
        /// </summary>
        /// <param name="record"></param>
        /// <returns></returns>
        public static string BuildRinexRecordV3(EphemerisParam record)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(BuildFirstLineV3(record));

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.IODE, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Crs, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.DeltaN, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.MeanAnomaly, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.Cuc, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Eccentricity, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Cus, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.SqrtA, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.Toe, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Cic, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.LongOfAscension, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Cis, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.Inclination, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.Crc, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.ArgumentOfPerigee, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.OmegaDot, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.EyeDot, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.CodesL2, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.GPSWeeks, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.L2PDataFlag?1:0, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.SVAccuracy, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.SVHealth, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.TGD, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(record.IODC, "E19.12", false));
            sb.AppendLine();

            sb.Append("    ");
            sb.Append(DoubleUtil.ScientificFomate(record.TTM, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(0, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(0, "E19.12", false));
            sb.Append(DoubleUtil.ScientificFomate(0, "E19.12", false));
            sb.AppendLine();

            return(sb.ToString());
        }
Exemplo n.º 5
0
        /// <summary>
        /// 获取卫星位置
        /// </summary>
        /// <param name="prn"></param>
        /// <param name="gpsTime"></param>
        /// <returns></returns>
        public override Ephemeris Get(SatelliteNumber prn, Time gpsTime)
        {
            if (!this.Prns.Contains(prn))
            {
                return(null);                         // throw new Exception("星历数据源中没有包含指定的卫星:" + prn);
            }
            EphemerisParam nearstNavRecord = GetNearstNavRecord(NavFile.GetEphemerisParams(prn), gpsTime, TimeSpan.FromDays(200));

            return(nearstNavRecord.GetEphemerisInfo(gpsTime));
        }
Exemplo n.º 6
0
        /// <summary>
        /// 指定时刻卫星是否健康可用。
        /// </summary>
        /// <param name="prn"></param>
        /// <param name="gpsTime"></param>
        /// <returns></returns>
        public override bool IsAvailable(SatelliteNumber prn, Time gpsTime)
        {
            if (!this.Prns.Contains(prn))
            {
                throw new Exception("星历数据源中没有包含指定的卫星:" + prn);
            }

            EphemerisParam nearstNavRecords = GetNearstNavRecord(NavFile.GetEphemerisParams(prn), gpsTime, TimeSpan.FromDays(200));

            return(nearstNavRecords.SVHealth == 0);
        }
Exemplo n.º 7
0
        /// <summary>
        /// 选择最接近的卫星星历。
        /// </summary>
        /// <returns></returns>
        public static EphemerisParam GetNearstNavRecord(List <EphemerisParam> records, Time gpsTime, TimeSpan TimeLimen)
        {
            EphemerisParam first = records[0];
            EphemerisParam last  = records[records.Count - 1];

            List <EphemerisParam> results = new List <EphemerisParam>();

            //小于时段
            if (gpsTime.SecondsOfWeek <= first.Time.SecondsOfWeek)
            {
                if (gpsTime.SecondsOfWeek < first.Time.SecondsOfWeek - TimeLimen.TotalSeconds) //过小
                {
                    throw new Exception("指定的时间已经超出星历时段允许的阈值!" + first.Time);
                }
                else
                {
                    return(first);
                }
            }
            //大于时段。
            if (gpsTime.SecondsOfWeek >= last.Time.SecondsOfWeek)
            {
                if (gpsTime.SecondsOfWeek > last.Time.SecondsOfWeek + TimeLimen.TotalSeconds) //过大
                {
                    throw new Exception("指定的时间已经超出星历时段允许的阈值!" + last.Time);
                }
                else
                {
                    return(last);
                }
            }
            //介于时段
            EphemerisParam prev = null;

            foreach (EphemerisParam current in records)
            {
                if (current.Time.SecondsOfWeek == gpsTime.SecondsOfWeek)
                {
                    return(current);
                }
                if (prev != null && IsBetween(gpsTime.SecondsOfWeek, prev.Time.SecondsOfWeek, current.Time.SecondsOfWeek))
                {
                    double disA = Math.Abs(gpsTime.SecondsOfWeek - current.Time.SecondsOfWeek);
                    double disB = Math.Abs(gpsTime.SecondsOfWeek - prev.Time.SecondsOfWeek);
                    if (disA < disB)
                    {
                        return(current);
                    }
                    return(prev);
                }
                prev = current;
            }
            throw new Exception("你不可能看到我的!");
        }
Exemplo n.º 8
0
 protected void OnEphemerisInfoReceived(EphemerisParam obj)
 {
     if (obj == null)
     {
         return;
     }
     if (EphemerisInfoReceived != null)
     {
         EphemerisInfoReceived(obj);
     }
 }
Exemplo n.º 9
0
        /// <summary>
        /// 检查,如果该星历步存在,则添加星历参数并返回true。
        /// </summary>
        /// <param name="para"></param>
        public bool CheckAndAppendEphemerisParam(EphemerisParam para)
        {
            if (!LatestNavEphDic.ContainsKey(para.Prn) || !LatestNavEphDic[para.Prn].Equals(para.Time))
            {
                LatestNavEphDic[para.Prn] = para.Time;

                AppendEphemerisParam(para);
                return(true);
            }

            log.Debug("缓存星历已存在,略过了 " + para.Prn + ", " + para.Time);
            return(false);
        }
Exemplo n.º 10
0
        /// <summary>
        /// GNSS导航文件的读取
        /// </summary>
        /// <returns></returns>
        public ParamNavFile ReadGnssNavFlie()
        {
            ParamNavFile f = new ParamNavFile();

            f.Header = ReadHeader(RinexFileName);
            //测试版本
            if (f.Header.Version == 0)
            {
                using (StreamReader sr = new StreamReader(RinexFileName, UnicodeEncoding.UTF8))
                {
                    RinexUtil.SkipHeader(sr);
                }
            }

            using (StreamReader sr = new StreamReader(RinexFileName, UnicodeEncoding.UTF8))
            {
                RinexUtil.SkipHeader(sr);

                if (f.Header.Version < 3.0)
                {
                    while (sr.Peek() != -1)
                    {
                        EphemerisParam record = ReadRecordV2(sr, f.Header);
                        f.Add(record);
                    }
                }
                else if (f.Header.Version >= 3.0 && f.Header.Version < 4.0)
                {
                    while (sr.Peek() != -1)
                    {
                        SatClockBias recordHeader = null;
                        string       line         = null;
                        try
                        {
                            line         = sr.ReadLine();
                            recordHeader = ParseFirstLineV3(line, f.Header);
                            var record = new EphemerisParam(recordHeader);
                            ReadRecordBodyV3(sr, record);
                            f.Add(record);
                        }
                        catch (Exception ex)
                        {
                            log.Error("导航星历解析错误!将继续尝试 " + ex.Message + line + ", Path:" + RinexFileName);
                        }
                    }
                }
            }
            return(f);
        }
Exemplo n.º 11
0
        /// <summary>
        /// Galileo 实时星历信息转换。
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public EphemerisParam GetEphemerisParam(Message1045 msg)
        {
            EphemerisParam para = new EphemerisParam();

            para.Prn = new SatelliteNumber((int)msg.SatelliteID, SatelliteType.E);

            #region 开普勒轨道根数 kepler elements
            para.Toc               = msg.Toc * 60;
            para.Toe               = msg.Toe * 60;
            para.SqrtA             = msg.SqrtA * RtcmConst.P2_19;
            para.Eccentricity      = msg.Eccentricity * RtcmConst.P2_33;
            para.Inclination       = msg.I0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.LongOfAscension   = msg.Omega0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.ArgumentOfPerigee = msg.ArgumentOfPerigee * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.MeanAnomaly       = msg.M0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            #endregion

            #region 轨道摄动参数 perturbation parameters
            para.DeltaN = msg.DeltaN * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            para.EyeDot = msg.Idot * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            //??
            para.OmegaDot = msg.OmegaDot * RtcmConst.SemiCircleToRad * RtcmConst.P2_43;
            para.Cuc      = msg.Cuc * RtcmConst.P2_29;
            //??
            para.Cus = msg.Cus * RtcmConst.P2_29;
            para.Crc = msg.Crc * RtcmConst.P2_5;
            //??
            para.Crs = msg.Crs * RtcmConst.P2_5;
            //??
            para.Cic = msg.Cic * RtcmConst.P2_29;
            //??
            para.Cis = msg.Cis * RtcmConst.P2_29;
            #endregion

            #region other satData
            para.IODE         = msg.Iodn;
            para.TTM          = 0;
            para.GalileoWeeks = GetAbsoluteWeekNumber((int)msg.WeekNumber);
            para.SVAccuracy   = msg.GalileoSVSISA;
            #endregion

            #region clock
            para.ClockBias  = msg.af0 * RtcmConst.P2_34;
            para.ClockDrift = msg.af1 * RtcmConst.P2_46;
            para.DriftRate  = msg.af2 * RtcmConst.P2_59;
            para.Time       = new Time(para.GPSWeeks, para.Toe);
            #endregion
            return(para);
        }
Exemplo n.º 12
0
 /// <summary>
 /// 添加星历参数
 /// </summary>
 /// <param name="para"></param>
 public void AppendEphemerisParam(EphemerisParam para)
 {
     StringBuilder.Append(BuildRinexRecordV3(para));
 }
Exemplo n.º 13
0
        /// <summary>
        /// 读取 RINEX 2.0s GPS导航文件。
        /// </summary>
        /// <param name="sr"></param>
        /// <param name="header"></param>
        /// <returns></returns>
        public static EphemerisParam ReadRecordV2(StreamReader sr, NavFileHeader header)
        {
            EphemerisParam record = new EphemerisParam();

            string line = sr.ReadLine();

            ParseFirstLineV2(line, header, record);

            line               = sr.ReadLine();
            line               = line.Replace('D', 'E');
            record.IODE        = double.Parse(line.Substring(3, 19));
            record.Crs         = double.Parse(line.Substring(22, 19));
            record.DeltaN      = double.Parse(line.Substring(41, 19));
            record.MeanAnomaly = double.Parse(line.Substring(60, 19));

            line                = sr.ReadLine();
            line                = line.Replace('D', 'E');
            record.Cuc          = double.Parse(line.Substring(3, 19));
            record.Eccentricity = double.Parse(line.Substring(22, 19));
            record.Cus          = double.Parse(line.Substring(41, 19));
            record.SqrtA        = double.Parse(line.Substring(60, 19));

            line                   = sr.ReadLine();
            line                   = line.Replace('D', 'E');
            record.Toe             = double.Parse(line.Substring(3, 19));
            record.Cic             = double.Parse(line.Substring(22, 19));
            record.LongOfAscension = double.Parse(line.Substring(41, 19));
            record.Cis             = double.Parse(line.Substring(60, 19));

            line = sr.ReadLine();
            line = line.Replace('D', 'E');
            record.Inclination       = double.Parse(line.Substring(3, 19));
            record.Crc               = double.Parse(line.Substring(22, 19));
            record.ArgumentOfPerigee = double.Parse(line.Substring(41, 19));
            record.OmegaDot          = double.Parse(line.Substring(60, 19));

            line               = sr.ReadLine();
            line               = line.Replace('D', 'E');
            record.EyeDot      = double.Parse(line.Substring(3, 19));
            record.CodesL2     = double.Parse(line.Substring(22, 19));
            record.GPSWeeks    = (int)double.Parse(line.Substring(41, 19));
            record.L2PDataFlag = double.Parse(line.Substring(60, 19)) == 1;

            line = sr.ReadLine();
            line = line.Replace('D', 'E');
            record.SVAccuracy = double.Parse(line.Substring(3, 19));
            record.SVHealth   = double.Parse(line.Substring(22, 19));
            record.TGD        = double.Parse(line.Substring(41, 19));
            record.IODC       = double.Parse(line.Substring(60, 19));

            if (header.Version == 1.0)
            {
                return(record);
            }

            line       = sr.ReadLine();
            line       = line.Replace('D', 'E');
            record.TTM = double.Parse(line.Substring(3, 19));

            return(record);
        }
Exemplo n.º 14
0
 /// <summary>
 ///  依据卫星轨道参数获取卫星位置。
 /// </summary>
 /// <param name="record"></param>
 /// <param name="gpstime"></param>
 /// <returns></returns>
 public static XYZ GetSatPos(EphemerisParam record, Time gpstime)
 {
     return(OrbitUtil.GetSatXyz(record, gpstime.SecondsOfWeek));
 }
Exemplo n.º 15
0
        /// <summary>
        /// BeiDou 实时星历信息转换。
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public EphemerisParam GetEphemerisParam(Message63 msg)
        {
            EphemerisParam para = new EphemerisParam();

            para.Prn = new SatelliteNumber((int)msg.SatelliteID, SatelliteType.C);

            #region 开普勒轨道根数 kepler elements
            para.Toc               = msg.Toc * 8;
            para.Toe               = msg.Toe * 8;
            para.SqrtA             = msg.SqrtA * RtcmConst.P2_19;
            para.Eccentricity      = msg.Eccentricity * RtcmConst.P2_33;
            para.Inclination       = msg.I0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.LongOfAscension   = msg.Omega0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.ArgumentOfPerigee = msg.ArgumentOfPerigee * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            para.MeanAnomaly       = msg.M0 * RtcmConst.P2_31 * RtcmConst.SemiCircleToRad;
            #endregion

            #region 轨道摄动参数 perturbation parameters
            para.DeltaN = msg.DeltaN * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            para.EyeDot = msg.Idot * RtcmConst.P2_43 * RtcmConst.SemiCircleToRad;
            //??
            para.OmegaDot = msg.OmegaDot * RtcmConst.SemiCircleToRad * RtcmConst.P2_43;
            para.Cuc      = msg.Cuc * RtcmConst.P2_31;
            //??
            para.Cus = msg.Cus * RtcmConst.P2_31;
            para.Crc = msg.Crc * RtcmConst.P2_6;
            //??
            para.Crs = msg.Crs * RtcmConst.P2_6;
            //??
            para.Cic = msg.Cic * RtcmConst.P2_31;
            //??
            para.Cis = msg.Cis * RtcmConst.P2_31;
            #endregion

            #region other satData
            para.IODE = msg.Aode;
            //para.CodesL2 = msg.CodeOnL2;
            //para.BeiDouWeeks = GetAbsoluteBeiDouWeekNumber((int)msg.WeekNumber);
            para.GPSWeeks = Setting.ReceivingTimeOfNtripData.GpsWeek;//para.BeiDouWeeks + 1356;
            //para.L2PDataFlag = msg.L2PDataFlag;
            if (msg.BeiDOuURAI >= 0 && msg.BeiDOuURAI < 6)
            {
                para.SVAccuracy = Math.Pow(2, msg.BeiDOuURAI / 2 + 1);
            }
            else if (msg.BeiDOuURAI < 15)
            {
                para.SVAccuracy = Math.Pow(2, msg.BeiDOuURAI - 2);
            }
            else
            {
                para.SVAccuracy = 9999999.9999;
            }
            para.SVHealth      = msg.SvHealth;
            para.Tgd1OfBeidDou = msg.Tgd1 * 0.1;
            para.Tgd2OfBeidDou = msg.Tgd2 * 0.1;
            para.IODC          = msg.Aodc;
            para.SatH1         = msg.SatH1;
            #endregion

            #region clock
            para.ClockBias  = msg.a0 * RtcmConst.P2_33;
            para.ClockDrift = msg.a1 * RtcmConst.P2_50;
            para.DriftRate  = msg.a2 * RtcmConst.P2_66;
            para.Time       = new Time(para.GPSWeeks, para.Toe);
            #endregion

            return(para);
        }
Exemplo n.º 16
0
 protected override void dataProvider_EphemerisInfoReceived(EphemerisParam obj)
 {
     this.WriteEphemerisParam(obj);
 }
Exemplo n.º 17
0
 public void WriteEphemerisParam(EphemerisParam obj)
 {
     //写入文件
     GpsNavFileWriter.CheckAndAppendEphemerisParam(obj);
     GpsNavFileWriter.SaveToFile();
 }
Exemplo n.º 18
0
 protected virtual void dataProvider_EphemerisInfoReceived(EphemerisParam obj)
 {
 }
Exemplo n.º 19
0
 void RtcmDataParser_EphemerisInfoReceived(EphemerisParam obj)
 {
     //  RtGnssDataWriter.WriteEphemerisParam(obj);
 }
Exemplo n.º 20
0
 /// <summary>
 /// 添加星历参数,重复星历将失败。
 /// </summary>
 /// <param name="EphemerisParam"></param>
 public void Add(EphemerisParam EphemerisParam)
 {
     this.ParamNavFile.Add(EphemerisParam);
 }
Exemplo n.º 21
0
        /// <summary>
        /// 读取 RINEX 3.0s GNSS 导航文件。
        /// </summary>
        /// <param name="sr"></param>
        /// <param name="header"></param>
        /// <returns></returns>
        public static EphemerisParam ReadRecordBodyV3(StreamReader sr, EphemerisParam record)
        {
            string line = null;

            if (record.Prn.SatelliteType == SatelliteType.U)
            {
                return(record);
            }
            //采用坐标
            while (record.Prn.SatelliteType == SatelliteType.S || record.Prn.SatelliteType == SatelliteType.R)
            {
                sr.ReadLine();
                sr.ReadLine();
                sr.ReadLine();
                line = sr.ReadLine();
                //ParseFirstLineV3(line, header, record);
                // GlonassNaviFileReader.ReadRecordBodyV3(record )
            }

            //轨道参数
            if (record.Prn.SatelliteType == SatelliteType.E ||
                record.Prn.SatelliteType == SatelliteType.C ||
                record.Prn.SatelliteType == SatelliteType.G ||
                record.Prn.SatelliteType == SatelliteType.J ||
                record.Prn.SatelliteType == SatelliteType.I)
            {
                line               = sr.ReadLine();
                line               = line.Replace('D', 'E');
                record.IODE        = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.Crs         = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.DeltaN      = Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.MeanAnomaly = Geo.Utils.StringUtil.ParseDouble(line, 61, 19);

                line                = sr.ReadLine();
                line                = line.Replace('D', 'E');
                record.Cuc          = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.Eccentricity = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.Cus          = Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.SqrtA        = Geo.Utils.StringUtil.ParseDouble(line, 61, 19);

                line                   = sr.ReadLine();
                line                   = line.Replace('D', 'E');
                record.Toe             = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.Cic             = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.LongOfAscension = Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.Cis             = Geo.Utils.StringUtil.ParseDouble(line, 61, 19);

                line = sr.ReadLine();
                line = line.Replace('D', 'E');
                record.Inclination       = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.Crc               = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.ArgumentOfPerigee = Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.OmegaDot          = Geo.Utils.StringUtil.ParseDouble(line, 61, 19);

                line               = sr.ReadLine();
                line               = line.Replace('D', 'E');
                record.EyeDot      = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.CodesL2     = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.GPSWeeks    = (int)Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.L2PDataFlag = Geo.Utils.StringUtil.ParseDouble(line, 61, 19) == 1;

                line = sr.ReadLine();
                line = line.Replace('D', 'E');
                record.SVAccuracy = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
                record.SVHealth   = Geo.Utils.StringUtil.ParseDouble(line, 23, 19);
                record.TGD        = Geo.Utils.StringUtil.ParseDouble(line, 42, 19);
                record.IODC       = Geo.Utils.StringUtil.ParseDouble(line, 61, 19);

                //if (header.Version == 1.0) return record;

                line       = sr.ReadLine();
                line       = line.Replace('D', 'E');
                record.TTM = Geo.Utils.StringUtil.ParseDouble(line, 4, 19);
            }
            return(record);
        }