Beispiel #1
0
        /// <summary>
        /// 相对论效应改正。
        /// 由于卫星速度快,产生相对论效应,使卫星钟变慢。
        /// </summary>
        /// <param name="sat"></param>
        /// <returns></returns>
        public static double GetRelativeCorrection(IEphemeris sat)
        {
            XYZ pos   = sat.XYZ;
            XYZ speed = sat.XyzDot;

            return(EphemerisUtil.GetRelativeCorrection(pos, speed));
        }
Beispiel #2
0
        /// <summary>
        /// 计算
        /// </summary>
        /// <param name="geoCoord"></param>
        /// <param name="Time"></param>
        /// <returns></returns>
        public DopValue Calculate(GeoCoord geoCoord, Time Time)
        {
            // var prns = this.EphemerisService.Prns.FindAll(m=>this.SatelliteTypes.Contains(m.SatelliteType));
            this.Time = Time;

            List <Ephemeris> ephs = new List <Ephemeris>();

            foreach (var prn in Prns)
            {
                if (SatWeights != null && !SatWeights.Contains(prn))
                {
                    continue;
                }
                ephs.Add(this.EphemerisService.Get(prn, Time));
            }
            var sats = EphemerisUtil.GetSatsInVisible(geoCoord, ephs, CutOffAngle);
            var xyz  = CoordTransformer.GeoCoordToXyz(geoCoord);

            if (sats.Count == 0)
            {
                return(null);
            }
            if (sats.Count < 4)
            {
                return(new DopValue()
                {
                    StationXYZ = xyz, Time = sats[0].Time, SatCount = sats.Count
                });
            }
            return(GetDopValue(xyz, sats));
        }
Beispiel #3
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);
        }
Beispiel #4
0
 /// <summary>
 /// 返回指定时间段,文件记录的星历信息。
 /// 需要计算,计算太多是否浪费资源?
 /// </summary>
 /// <param name="prn"></param>
 /// <param name="from"></param>
 /// <param name="to"></param>
 /// <returns></returns>
 public override List <Gnsser.Ephemeris> Gets(SatelliteNumber prn, Time from, Time to)
 {
     if (EphemerisUtil.IsEphemerisParam(prn.SatelliteType))
     {
         return(this.ParamNavFileEphService.Gets(prn, from, to));
     }
     return(this.GlonassNavFileEphService.Gets(prn, from, to));
 }
Beispiel #5
0
 /// <summary>
 /// 获取卫星位置
 /// </summary>
 /// <param name="prn"></param>
 /// <param name="gpsTime"></param>
 /// <returns></returns>
 public override Ephemeris Get(SatelliteNumber prn, Time gpsTime)
 {
     if (EphemerisUtil.IsEphemerisParam(prn.SatelliteType))
     {
         return(this.ParamNavFileEphService.Get(prn, gpsTime));
     }
     return(this.GlonassNavFileEphService.Get(prn, gpsTime));
 }
Beispiel #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);
            }

            if (EphemerisUtil.IsEphemerisParam(prn.SatelliteType))
            {
                return(this.ParamNavFileEphService.IsAvailable(prn, gpsTime));
            }
            return(this.GlonassNavFileEphService.IsAvailable(prn, gpsTime));
        }
Beispiel #7
0
        /// <summary>
        /// 计算
        /// </summary>
        /// <param name="xyz"></param>
        /// <param name="Time"></param>
        /// <returns></returns>
        public DopValue Calculate(XYZ xyz, Time Time)
        {
            // var prns = this.EphemerisService.Prns.FindAll(m=>this.SatelliteTypes.Contains(m.SatelliteType));
            this.Time = Time;

            List <Ephemeris> ephs = new List <Ephemeris>();

            foreach (var prn in Prns)
            {
                if (SatWeights != null && !SatWeights.Contains(prn))
                {
                    continue;
                }
                ephs.Add(this.EphemerisService.Get(prn, Time));
            }
            var sats = EphemerisUtil.GetSatsInVisible(xyz, ephs, CutOffAngle);

            if (sats.Count < 4)
            {
                return(null);
            }

            return(GetDopValue(xyz, sats));
        }