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(); }
/// <summary> /// 增加改正 /// </summary> /// <param name="name"></param> /// <param name="val"></param> public void AddCorrection(CorrectionNames name, double val) { Corrections.Add(name.ToString(), val); }
/// <summary> /// 增加改正 /// </summary> /// <param name="name"></param> /// <param name="val"></param> public void SetCorrection(CorrectionNames name, double val) { Corrections[name.ToString()] = val; }
/// <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; } }