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
        /// <summary>
        /// 读取GLONASS导航文件
        /// </summary>
        /// <param name="navFilePath">路径</param>
        /// <returns></returns>
        public static GlonassNavFile ReadFileV2V3(string navFilePath)
        {
            GlonassNavFile f = new GlonassNavFile();

            f.Header = ParamNavFileReader.ReadHeader(navFilePath);

            //测试版本
            if (f.Header.Version == 0)
            {
                using (StreamReader sr = new StreamReader(navFilePath, UnicodeEncoding.UTF8))
                {
                    RinexUtil.SkipHeader(sr);
                    try
                    {
                        GlonassNaviFileReader.ReadRecordV2(sr, f.Header);
                        GlonassNaviFileReader.ReadRecordV2(sr, f.Header);
                        //  f.Header.Version = 2.0;
                    }
                    catch
                    {
                        f.Header.Version = 1.0;
                    }
                }
            }

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

                while (sr.Peek() != -1)
                {
                    GlonassNavRecord record = null;
                    if (f.Header.Version < 3)
                    {
                        record = GlonassNaviFileReader.ReadRecordV2(sr, f.Header);
                    }
                    else if (f.Header.Version >= 3)
                    {
                        record = GlonassNaviFileReader.ReadRecordV3(sr, f.Header);
                    }
                    else
                    {
                        throw new ArgumentException(" 导航文件版本 " + f.Header.Version);
                    }
                    f.Add(record);
                }
            }
            return(f);
        }
Exemplo n.º 3
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.º 4
0
 /// <summary>
 /// 重置
 /// </summary>
 public override void Reset()
 {
     StreamReader.BaseStream.Position = 0;
     StreamReader.BaseStream.Seek(0, SeekOrigin.Begin);
     RinexUtil.SkipLines(StreamReader, Header.LineNumber);
 }
Exemplo n.º 5
0
        /// <summary>
        /// 读取RINEX文件的头文件。
        /// </summary>
        /// <param name="rinexFileName">文件路径</param>
        /// <returns></returns>
        public static NavFileHeader ReadHeader(string RinexFileName)
        {
            NavFileHeader header = new NavFileHeader();

            header.Name = Path.GetFileName(RinexFileName);
            using (StreamReader r = new StreamReader(RinexFileName, Encoding.UTF8))
            {
                string line        = null;
                string headerLabel = null;
                while ((line = r.ReadLine()) != null && headerLabel != RinexHeaderLabel.END_OF_HEADER)
                {
                    //中文字符支持
                    int nonAscCount = StringUtil.GetNonAscCount(line.Substring(0, 60 > line.Length ? line.Length : 60));
                    headerLabel = line.Substring(60 - nonAscCount).TrimEnd();//header label 61-80
                    if (headerLabel.Contains(RinexHeaderLabel.END_OF_HEADER))
                    {
                        break;
                    }
                    switch (headerLabel)
                    {
                    /**
                     *  +--------------------+------------------------------------------+------------+
                     | HEADER LABEL | DESCRIPTION | FORMAT |
                     | (Columns 61-80) | | |
                     +--------------------+------------------------------------------+------------+
                     |RINEX VERSION / TYPE| - Format version : 3.00 | F9.2,11X, |
                     | | - File type: O for Observation Data | A1,19X, |
                     | | - Satellite System: G: GPS | A1,19X |
                     | | R: GLONASS | |
                     | | E: Galileo | |
                     | | S: SBAS payload | |
                     | | M: Mixed | |
                     +--------------------+------------------------------------------+------------+
                     *
                     */
                    case RinexHeaderLabel.RINEX_VERSION_TYPE:
                        header.Version  = double.Parse(line.Substring(0, 9));
                        header.FileType = (RinexFileType)Enum.Parse(typeof(RinexFileType), line.Substring(20, 1));
                        if (line.Substring(40, 1) == " ")
                        {
                            header.SatelliteType = RinexUtil.GetSatelliteType(header.FileType);
                        }
                        else
                        {
                            header.SatelliteType = (SatelliteType)Enum.Parse(typeof(SatelliteType), line.Substring(40, 1));
                        }
                        break;

                    case RinexHeaderLabel.PGM_RUN_BY_DATE:
                        header.CreationProgram = line.Substring(0, 20).TrimEnd();
                        header.CreationAgence  = line.Substring(20, 20).Trim();
                        header.CreationDate    = line.Substring(40, 20).TrimEnd();
                        break;

                    case RinexHeaderLabel.COMMENT:
                        if (header.Comments == null)
                        {
                            header.Comments = new List <string>();
                        }
                        header.Comments.Add(line.Substring(0, 60 - nonAscCount).Trim());
                        break;

                    case RinexHeaderLabel.RCV_CLOCK_OFFS_APPL:

                        break;

                    case RinexHeaderLabel.LEAP_SECONDS:
                        header.LeapSeconds = int.Parse(line.Substring(0, 6));
                        break;

                    case RinexHeaderLabel.NUM_OF_SATELLITES:
                        break;

                    case RinexHeaderLabel.PRN_NUM_OF_OBS:
                        break;

                    //2X,4D12.4
                    case RinexHeaderLabel.ION_ALPHA:
                        line = line.Replace('D', 'E');
                        header.IonParam.AlfaA0 = double.Parse(line.Substring(2, 12));
                        header.IonParam.AlfaA1 = double.Parse(line.Substring(14, 12));
                        header.IonParam.AlfaA2 = double.Parse(line.Substring(26, 12));
                        header.IonParam.AlfaA3 = double.Parse(line.Substring(38, 12));
                        break;

                    case RinexHeaderLabel.ION_BETA:
                        line = line.Replace('D', 'E');
                        header.IonParam.BetaB0 = double.Parse(line.Substring(2, 12));
                        header.IonParam.BetaB1 = double.Parse(line.Substring(14, 12));
                        header.IonParam.BetaB2 = double.Parse(line.Substring(26, 12));
                        header.IonParam.BetaB3 = double.Parse(line.Substring(38, 12));
                        break;

                    //3X,2D19.12,2I9
                    case RinexHeaderLabel.DELTA_UTC_A0_A1_T_W:
                        line = line.Replace('D', 'E');
                        header.UtcDeltaA0 = double.Parse(line.Substring(3, 19));
                        header.UtcDeltaA1 = double.Parse(line.Substring(22, 19));
                        header.UtcDeltaT  = double.Parse(line.Substring(41, 9));
                        header.UtcDeltaW  = double.Parse(line.Substring(50, 9));
                        break;

                    case RinexHeaderLabel.PRN_LIST:
                        if (header.PrnList == null)
                        {
                            header.PrnList = new List <SatelliteNumber>();
                        }
                        string[] prnStrs = line.Substring(0, 60).Trim().Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                        foreach (string prn in prnStrs)
                        {
                            header.PrnList.Add(SatelliteNumber.Parse(prn));
                        }

                        break;

                    //rinex 3.0 nav
                    case RinexHeaderLabel.TIME_SYSTEM_CORR:

                        break;

                    //rinex 3.0 nav
                    case RinexHeaderLabel.IONOSPHERIC_CORR:

                        break;

                    case RinexHeaderLabel.END_OF_HEADER:
                    default: break;
                    }
                }
            }
            return(header);
        }