예제 #1
0
 /// <summary>
 /// 构造函数 格网电离层模型改正
 /// </summary>
 public IonoGridModelCorrector(IIonoService IonoService, bool isPhase = false)
 {
     this.Name = "格网或球谐函数电离层模型距离改正";
     this.IsCorrectionOnPhase = isPhase;
     this.CorrectionType      = CorrectionType.IonoGridModel;
     this.IonoService         = IonoService;
     if (IonoService == null)
     {
         log.Error(this.Name + "服务源为空");
     }
 }
예제 #2
0
        /// <summary>
        /// 获取电离层格网模型延迟
        /// </summary>
        /// <param name="sat"></param>
        /// <param name="frequenceType"></param>
        /// <param name="IonoService"></param>
        /// <returns></returns>
        public static double GetGridModelCorrection(EpochSatellite sat, FrequenceType frequenceType, IIonoService IonoService)
        {
            //计算穿刺点获取电离层浓度
            var punctPoint       = sat.GetIntersectionXyz(IonoService.HeightOfModel);
            var geocentricLonLat = Geo.Coordinates.CoordTransformer.XyzToSphere(punctPoint);
            var tec = IonoService.GetSlope(sat.ReceiverTime, geocentricLonLat, sat.SphereElevation);

            if (tec == null || tec.Value == 0)
            {
                return(0);
            }
            Frequence freq            = sat[frequenceType].Frequence;
            double    slopeDelayFreqA = 1.0 * GetIonoDelayRange(tec.Value, freq.Value);//斜方向延迟

            return(slopeDelayFreqA);
        }
예제 #3
0
        private void button_view_Click(object sender, EventArgs e)
        {
            double       cutOff       = namedFloatControl_satCutOff.GetValue();
            bool         isRangeOrTec = checkBox_isRangeOrTec.Checked;
            var          prnsString   = namedStringControl_prn.GetValue();
            var          step         = timeLoopControl1.TimeStepControl.GetValue();
            var          timePeriod   = timeLoopControl1.TimePeriodControl.TimePeriod;
            var          prns         = SatelliteNumber.ParsePRNsBySplliter(prnsString, new char[] { ',', ',', ';' });
            IIonoService ionoService  = null;

            IonoSerivceType type = enumRadioControl_IonoSerivceType.GetCurrent <Gnsser.IonoSerivceType>();

            switch (type)
            {
            case IonoSerivceType.IgsGrid:
                ionoService = GlobalIgsGridIonoService.Instance;
                break;

            case IonoSerivceType.SphericalHarmonics:
                ionoService = GlobalCodeHarmoIonoService.Instance;
                break;

            case IonoSerivceType.GpsKlobuchar:
                ionoService = GlobalKlobucharIonoService.Instance;
                break;

            default:
                break;
            }

            var ephService = GlobalIgsEphemerisService.Instance;
            var siteXyz    = XYZ.Parse(namedStringControl_coord.GetValue());

            double freqValue = Frequence.GpsL1.Value;

            if (!checkBox_freq.Checked)
            {
                freqValue = Frequence.GpsL2.Value;
            }


            ObjectTableStorage table = new ObjectTableStorage();

            for (var time = timePeriod.Start; time < timePeriod.End; time += TimeSpan.FromMinutes(step))
            {
                table.NewRow();
                table.AddItem("Epoch", time);
                foreach (var prn in prns)
                {
                    var eph = ephService.Get(prn, time);
                    if (eph == null)
                    {
                        continue;
                    }
                    var satXyz = eph.XYZ;

                    var polar = CoordTransformer.XyzToGeoPolar(satXyz, siteXyz, AngleUnit.Degree);
                    if (cutOff > polar.Elevation)
                    {
                        continue;
                    }


                    if (isRangeOrTec)
                    {
                        var range = ionoService.GetSlopeDelayRange(time, siteXyz, satXyz, freqValue);

                        table.AddItem(prn, range);
                    }
                    else
                    {
                        var tec = ionoService.GetSlope(time, siteXyz, satXyz);


                        table.AddItem(prn, tec.Value);
                    }
                }
            }


            objectTableControl1.DataBind(table);
        }