Exemple #1
0
        /// <summary>
        /// 读取头文件。
        /// </summary>
        /// <param name="fileName">文件路径</param>
        /// <returns></returns>
        private static AntennaHeader ReadHeader(string fileName)
        {
            using (StreamReader sr = new StreamReader(fileName))
            {
                AntennaHeader header = new AntennaHeader();
                //Read one line from file
                string line = sr.ReadLine();
                //Get label. remove trailing and leading blanks
                string label = line.Substring(60).Trim();

                while (label != AntexLabel.END_OF_HEADER)
                {
                    switch (label)
                    {
                    case AntexLabel.ANTEX_VERSION_SYST:
                        header.Version = Convert.ToDouble(line.Substring(0, 8));
                        char sys = line[20];
                        header.SatelliteSystem = (SatelliteSystem)Enum.Parse(typeof(SatelliteSystem), sys.ToString());
                        break;

                    //Process PCV type line
                    case AntexLabel.PCV_TYPE_REFANT:
                        ParsePcvType(header, line);
                        break;

                    case AntexLabel.COMMENT:
                        header.Comments.Add(line.Substring(0, 60).Trim());
                        break;

                    default: break;
                    }
                    line  = sr.ReadLine();
                    label = line.Substring(60).Trim();
                }
                return(header);
            }
        }
Exemple #2
0
        /// <summary>
        /// 解析PCV
        /// </summary>
        /// <param name="header"></param>
        /// <param name="line"></param>
        private static void ParsePcvType(AntennaHeader header, string line)
        {
            char pcvt = line[0];

            switch (pcvt)
            {
            case 'A':
                header.PcvType = PcvType.Absolute;
                break;

            case 'R':
                header.PcvType         = PcvType.Relative;
                header.ReferenceAntena = line.Substring(20, 20).Trim();
                if (header.ReferenceAntena == "")
                {
                    header.ReferenceAntena = "AOAD/M_T";    //default
                }
                header.ReferenceAntenaSerial = line.Substring(40, 20).Trim();
                break;

            default:
                throw new Exception("天线头部的 PCV 类型无效.");
            }
        }
Exemple #3
0
        /// <summary>
        /// 解析一个天线段。
        ///  Fill most Antenna satData
        /// </summary>
        /// <param name="firstLine"></param>
        /// <param name="sr"></param>
        /// <param name="header"></param>
        /// <returns></returns>
        private static Antenna ParseAntenna(string firstLine, StreamReader sr, AntennaHeader header)
        {
            //These flags take care of "Valid From" and "Valid Until"
            bool validFromPresent  = false;
            bool validUntilPresent = false;
            //Create 'Antenna' object to be returned
            Antenna antenna = CreateAntenna(firstLine);

            antenna.Header = header;

            //Read the rest of satData
            string line;

            //Read one line from file
            line = sr.ReadLine();
            string label = line.Substring(60).Trim();

            // Repeat until 'endOfAntenna' line
            while (label != AntexLabel.END_OF_ANTENNA)
            {
                //Process 'calibrationMehtod' line
                switch (label)
                {
                case AntexLabel.METH_BY_DATE:
                    antenna.CalibrationMethod = (line.Substring(0, 20).Trim());
                    antenna.Agency            = line.Substring(20, 20).Trim();
                    antenna.NumOfAntennas     = line.Substring(40, 6).Trim();
                    antenna.Date = line.Substring(50, 10).Trim();
                    break;

                case AntexLabel.DAZI:
                    antenna.DeltaAzimuth = (Convert.ToDouble(line.Substring(2, 6).Trim()));
                    break;

                case AntexLabel.ZEN1_ZEN2_DZEN:
                    antenna.ZenithStart = (Convert.ToDouble(line.Substring(2, 6).Trim()));
                    antenna.ZenithEnd   = (Convert.ToDouble(line.Substring(8, 6).Trim()));
                    antenna.DeltaZenith = (Convert.ToDouble(line.Substring(14, 6).Trim()));

                    break;

                case AntexLabel.NUM_OF_FREQUENCIES:
                    antenna.NumOfFrequencies = (Convert.ToInt32(line.Substring(0, 6).Trim()));
                    break;

                case AntexLabel.VALID_FROM:
                    Time valFrom = Time.Parse(line.Substring(0, 43));
                    antenna.ValidDateFrom = (valFrom);
                    validFromPresent      = true;// Mark that we found "Valid From"

                    break;

                case AntexLabel.VALID_UNTIL:     // Get validity as Year, Month, Day, Hour, Min, Sec
                    Time valUntil = Time.Parse(line.Substring(0, 43));
                    antenna.ValidDateUntil = (valUntil);
                    // Mark that we found "Valid Until"
                    validUntilPresent = true;
                    break;

                case AntexLabel.SINEX_CODE:      //Get antenna Sinex Code
                    antenna.SinexCode = line.Substring(0, 10).Trim();
                    break;

                case AntexLabel.COMMENT:
                    antenna.AddComment(line.Substring(0, 60).Trim());
                    break;

                case AntexLabel.START_OF_FREQUENCY:    //Get frequency indicator
                    label = ParseFrequency(sr, antenna, line);
                    break;

                case AntexLabel.START_OF_FREQ_RMS:    //Get frequency indicator
                    label = ParseFrequencyRms(sr, antenna, ref line);
                    break;

                default:
                    break;
                }
                //Read another line from file
                line = sr.ReadLine();
                //Get current label
                label = line.Substring(60).Trim();
            }
            //Take care of "Valid From" field if it was not present
            if (!validFromPresent)
            {
                //Set as "DayTime: BEGINNING_OF_TIME"
                antenna.ValidDateFrom = (Time.MinValue);
            }
            if (!validUntilPresent)
            {
                antenna.ValidDateUntil = (Time.MaxValue);
            }
            return(antenna);
        }