public SupportHelper(string correctionNamesPath)
        {
            // nechceme mit nase jmena na githubu, takze correction file
            if (File.Exists(correctionNamesPath))
            {
                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List <PersonNames>));
                using (var stream = new FileStream(correctionNamesPath, FileMode.Open, FileAccess.Read))
                {
                    // musi byt v utf* jinak se json serializer osype
                    var reader = new StreamReader(stream);
                    var data   = reader.ReadToEnd();
                    using (var memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
                    {
                        CorrectionNames = (List <PersonNames>)serializer.ReadObject(memoryStream);
                    }
                }
            }

            LineLengthCorrection = CorrectionNames.Select(i => i.FullName.Length).Max();
        }
Example #2
0
 /// <summary>
 /// 增加改正
 /// </summary>
 /// <param name="name"></param>
 /// <param name="val"></param>
 public void AddCorrection(CorrectionNames name, double val)
 {
     Corrections.Add(name.ToString(), val);
 }
Example #3
0
 /// <summary>
 /// 增加改正
 /// </summary>
 /// <param name="name"></param>
 /// <param name="val"></param>
 public void SetCorrection(CorrectionNames name, double val)
 {
     Corrections[name.ToString()] = val;
 }
Example #4
0
        /// <summary>
        /// 校正其中一个。
        /// </summary>
        /// <param name="sat"></param>
        /// <param name="freq"></param>
        /// <param name="obsFreq"></param>
        private void ReviseOneFreq(EpochSatellite sat, FrequenceType freq, FreqenceObservation obsFreq)
        {
            double       correction       = 0;
            RmsedNumeral corredRange      = RmsedNumeral.Zero;
            var          rangeObservation = obsFreq.PseudoRange;
            double       rawRange         = rangeObservation.Value;
            double       rawPhase         = obsFreq.PhaseRange.Value;

            var PS = PhaseSmoothedRangeBuilderManager.GetOrCreate(BuildSatFreqName(sat, freq));

            double ionoDiffer = 0;

            switch (this.PhaseSmoothedRangeBuilderManager.IonoDifferCorrectionType)
            {
            case IonoDifferCorrectionType.No:
                break;

            case IonoDifferCorrectionType.DualFreqCarrier:
                ionoDiffer = sat.GetIonoLenByDifferPhase(freq);
                break;

            case IonoDifferCorrectionType.WindowPolyfit:
                break;

            case IonoDifferCorrectionType.WindowWeightedAverage:
                break;

            case IonoDifferCorrectionType.IndicatedFile:
                if (IonoDeltaTable == null)
                {
                    log.Warn("电离层延迟变化表格为NULL!无法改正");
                }
                else
                {
                    var dat = InputedIonoDelta.Get(sat.Prn.ToString());
                    if (dat != null)
                    {
                        var win = dat.GetNumeralWindowData(sat.ReceiverTime);

                        if (win != null)
                        {
                            ionoDiffer = win.GetPolyFitValue(sat.ReceiverTime, 1, 2).Value;
                        }
                    }
                }
                break;

            default:
                break;
            }

            corredRange = PS.SetReset(sat.IsUnstable)
                          .SetRawValue(sat.ReceiverTime, rawRange, rawPhase, ionoDiffer)
                          .Build();
            correction = corredRange.Value - rawRange;

            //规定:原生观测量改正到观测值上【在观测方程的左边,因此符号不变】。 //2018.05.29, czs, int hmx
            CorrectionNames name = CorrectionNames.PhaseSmoothRange;

            switch (freq)
            {
            case FrequenceType.A:
                name = CorrectionNames.PhaseSmoothRangeA;
                break;

            case FrequenceType.B:
                name = CorrectionNames.PhaseSmoothRangeB;
                break;

            case FrequenceType.C:
                name = CorrectionNames.PhaseSmoothRangeC;
                break;

            default:
                name = CorrectionNames.PhaseSmoothRange;
                break;
            }

            rangeObservation.SetCorrection(name, correction);

            sat.StdDevOfRange = corredRange.StdDev;

            //检查更新电离层改正
            if (PS is GnsserWindowedPhaseSmoothedRangeBuilder)
            {
                obsFreq.TempAmbiguityAndIonoLength = ((GnsserWindowedPhaseSmoothedRangeBuilder)PS).SmoothRangeWindow.CurrentIonoAndHalfLambdaLen;
            }
        }