private void button_read_Click(object sender, EventArgs e) { var path = this.fileOpenControl1.FilePath; IonoReader reader = new IonoReader(path); this.File = reader.ReadAll(); this.IonoFileService = new Data.GridIonoFileService(File); bindingSource_times.DataSource = File.Keys; bindingSource_sections.DataSource = File.Values; mgr.Clear(); table = mgr.AddTable(File.Name); StringBuilder sb = new StringBuilder(); sb.AppendLine("--------- Satellite ---------"); foreach (var item in File.DcbsOfSats) { sb.AppendLine(item.Key + "\t" + item.Value); } sb.AppendLine("--------- Site ---------"); foreach (var item in File.DcbsOfSites) { sb.AppendLine(item.Key + "\t" + item.Value); } richTextBoxControl1Dcb.Text = sb.ToString(); }
private void button_xyzToNeu_Click(object sender, EventArgs e) { try { List <XYZ> originEcefXyz = GetOriginEcefXyz(); List <XYZ> targetEcefXyz = GetTargetEcefXyz(); ObjectTableManager manager = new ObjectTableManager(); var table = manager.AddTable("ENU"); int count = originEcefXyz.Count; for (int i = 0; i < count; i++) { var oXyz = originEcefXyz[i]; var tXyz = targetEcefXyz[i]; var enu = CoordTransformer.XyzToEnu(tXyz, oXyz); table.NewRow(); table.AddItem("Index", i); table.AddItem("E", enu.E); table.AddItem("N", enu.N); table.AddItem("U", enu.U); } this.objectTableControl1.DataBind(table); }catch (Exception ex) { Geo.Utils.FormUtil.ShowErrorMessageBox(ex.Message); } }
/// <summary> /// 构造函数 /// </summary> /// <param name="IsUseGNSSerSmoothRangeMethod"></param> /// <param name="ObsDataType"></param> /// <param name="WindowSize"></param> /// <param name="isWeighted"></param> /// <param name="FrequenceTypes"></param> /// <param name="isDeltaIonoFit"></param> /// <param name="OrderOfDeltaIonoPolyFit"></param> /// <param name="BufferSize"></param> /// <param name="ionoFitEpochCount"></param> /// <param name="SmoothRangeType"></param> /// <param name="IndicatedIonoDeltaFilePath"></param> public SingleFreqSelfIonoRangeReviser( bool IsUseGNSSerSmoothRangeMethod, SatObsDataType ObsDataType, int WindowSize, bool isWeighted, List <FrequenceType> FrequenceTypes, IonoDifferCorrectionType isDeltaIonoFit, int OrderOfDeltaIonoPolyFit, int BufferSize, int ionoFitEpochCount, SmoothRangeSuperpositionType SmoothRangeType, string IndicatedIonoDeltaFilePath) { this.Name = "单频电离层自我改正"; this.ObsDataType = ObsDataType; this.FrequenceTypes = FrequenceTypes; this.PhaseSmoothedRangeBuilderManager = new CarrierSmoothedRangeBuilderManager( IsUseGNSSerSmoothRangeMethod, WindowSize, isWeighted, isDeltaIonoFit, OrderOfDeltaIonoPolyFit, BufferSize, ionoFitEpochCount, SmoothRangeType) { IndicatedIonoDeltaFilePath = IndicatedIonoDeltaFilePath }; this.IsDualIonoFree = this.ObsDataType == SatObsDataType.IonoFreePhaseRange || this.ObsDataType == SatObsDataType.IonoFreeRange; this.Data = new BaseDictionary <SatelliteNumber, TimeNumeralWindowData>("数据", new Func <SatelliteNumber, TimeNumeralWindowData>(prn => new TimeNumeralWindowData(WindowSize) )); TableObjectStorages = new ObjectTableManager(); TableObjectStorage = TableObjectStorages.AddTable("模糊度概略距离值"); log.Info("启用:" + this.Name + " 对观测值进行改正!是否双频:" + IsDualIonoFree); }
protected override void Run(string[] inputPathes) { ObjectTableStorage satEleTable = GetSatEleTable(inputPathes); if (satEleTable == null) { return; } this.BindTableC(satEleTable); log.Info("成功读取卫星高度角文件"); AbstractPeriodBaseSatSelector BasePrnSelector = null; PeriodPrnManager PeriodPrnManager = null; string detailTableName = "BasePrnChainDetails"; if (!IsFlexibleSegmentaion) { var type = enumRadioControl1.GetCurrent <BaseSatSelectionType>(); detailTableName += "Of" + type + "_" + TimePeriodCount + "Count"; BasePrnSelector = new PeriodFixedSatSelector(satEleTable, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSamePrn, type); } else { detailTableName += "OfFlexible_" + namedFloatControl1AngleCut.Value + "deg"; BasePrnSelector = new FlexiblePeriodSatSelector(satEleTable, namedFloatControl1AngleCut.Value); } PeriodPrnManager = BasePrnSelector.Select(); var outPath = Path.Combine(this.OutputDirectory, Setting.GnsserConfig.BasePrnFileName); PeriodPrnManager.WriteToFile(outPath); //基准星接力 var mgr = new ObjectTableManager(this.OutputDirectory); var basePrnChain = mgr.AddTable(detailTableName); foreach (var item in PeriodPrnManager) { var vector = satEleTable.GetColObjectDicByObjIndex(item.Value.ToString(), item.TimePeriod.Start, item.TimePeriod.End); if (vector != null) { foreach (var prnVal in vector) { basePrnChain.NewRow(); basePrnChain.AddItem("Epoch", prnVal.Key); basePrnChain.AddItem(item.Value.ToString(), prnVal.Value); basePrnChain.EndRow(); } } } this.BindTableA(basePrnChain); this.BindTableB(BasePrnSelector.DetailResultTable); mgr.Add(BasePrnSelector.DetailResultTable); mgr.WriteAllToFileAndCloseStream(); var text = mgr.First.GetTextTable();// PeriodPrnManager.GetText(); ShowInfo(text); }
/// <summary> /// 获取对象表 /// </summary> /// <returns></returns> public ObjectTableManager GetObjectTables() { ObjectTableManager ressult = new ObjectTableManager(); ressult.Name = this.Name; foreach (var eq in this) { ressult.AddTable(eq.GetObjectTables()); } return(ressult); }
private void button_calculate_Click(object sender, EventArgs e) { if (calculater == null) { Geo.Utils.FormUtil.ShowWarningMessageBox("请先读取数据。"); return; } button_calculate.Enabled = false; UiToInitParams(); var dir = directorySelectionControl_output.Path; tables = new ObjectTableManager(dir); table = tables.AddTable("SphericalHarmonics"); backgroundWorker1.RunWorkerAsync(); }
private void button_smoothCurrent_Click(object sender, EventArgs e) { EnableRunButton(false); CheckAndReadObsFile(); ObjectTableManager tableObjectStorages; ObjectTableStorage IonoFitTable; tableObjectStorages = new ObjectTableManager(Setting.TempDirectory); IonoFitTable = tableObjectStorages.AddTable("IonoFit"); DateTime start = DateTime.Now; int bufferSize = namedIntControl_bufferCount.GetValue(); bool isShowPoly = checkBox_showPoly.Checked; PhaseSmoothRangeBulider = BuildPhaseSmoothRangeBulider(); int smoothWindow = this.namedIntControl_smoothWindow.GetValue(); double cutOff = namedFloatControl_satCutoff.GetValue(); bool isShowL1Only = checkBox_isShowL1Only.Checked; SatelliteNumber prn = (SatelliteNumber)this.bindingSource_sat.Current; GlobalIgsGridIonoService ionoService = GlobalIgsGridIonoService.Instance; GlobalIgsGridIonoDcbService ionoDcbService = GlobalIgsGridIonoDcbService.Instance; GlobalIgsEphemerisService ephemerisService = GlobalIgsEphemerisService.Instance; var TimedSmoothValueBuilderManager = new TimedSmoothValueBuilderManager(smoothWindow); List <TimedRinexSatObsData> records = ObsFile.GetEpochTimedObservations(prn); ObjectTableStorage table = new ObjectTableStorage(prn + "_平滑伪距"); var firtTime = records[0].Time; double P1_P2sat = ionoDcbService.GetDcb(firtTime, prn).Value *GnssConst.MeterPerNano; double P1_P2recMeter = ionoDcbService.GetDcbMeterForP1(firtTime, Path.GetFileName(ObsPath).Substring(0, 4).ToLower()); var siteXyz = ObsFile.Header.ApproxXyz; double prevIonoAmbiDcb = 0; double prevIonoAmbiDcbL2 = 0; RinexFreqObsBuilder FreqObsBuilder = new RinexFreqObsBuilder(); var epochSatBuilder = new RinexEpochSatBuilder(FreqObsBuilder); progressBarComponent1.InitProcess(records.Count); BufferedStreamService <TimedRinexSatObsData> bufferStream = new BufferedStreamService <TimedRinexSatObsData>(records, bufferSize); bufferStream.MaterialInputted += BufferStream_MaterialInputted; foreach (var record in bufferStream) { if (record == null) { continue; } progressBarComponent1.PerformProcessStep(); var time = record.Time; var data = record.SatObsData; var eph = ephemerisService.Get(prn, time); if (eph == null) { continue; } var satXyz = eph.XYZ; var polar = Geo.Coordinates.CoordTransformer.XyzToGeoPolar(satXyz, siteXyz, AngleUnit.Degree); if (polar.Elevation < cutOff) { continue; } var waveLenL1 = Frequence.GetFrequence(prn, FrequenceType.A, time).WaveLength; var waveLenL2 = Frequence.GetFrequence(prn, FrequenceType.B, time).WaveLength; double L1 = data.PhaseA.Value * waveLenL1; double P1 = data.RangeA.Value; double L2 = data.PhaseB != null ? record.SatObsData.PhaseB.Value * waveLenL2 : 0; double P2 = data.RangeB != null ? record.SatObsData.RangeB.Value : 0; //扩展 var sat = epochSatBuilder.SetPrn(record.SatObsData.Prn).Build(record.SatObsData); // get => (this.FrequenceA.PhaseRange.Value - this.FrequenceB.PhaseRange.Value) * Frequence.GetIonoAndDcbCoeffL1L2(this.Prn.SatelliteType); //double differIonoL1 = 0; //double differIonoL2 = 0; //if (prevIonoAmbiDcb == 0) //{ // prevIonoAmbiDcb = sat.IonoLenOfL1ByDifferL1L2; // prevIonoAmbiDcbL2 = sat.IonoLenOfL2ByDifferL1L2; //} //differIonoL1 = sat.IonoLenOfL1ByDifferL1L2 - prevIonoAmbiDcb; //differIonoL1 = sat.IonoLenOfL1ByDifferL1L2 - prevIonoAmbiDcb; // L1 = L1 + 2 * differIono; #region 载波相位平滑伪距 var smootherP1 = PhaseSmoothRangeBulider.GetOrCreate("P1"); var smootherP2 = PhaseSmoothRangeBulider.GetOrCreate("P2"); var P1s = smootherP1 .SetReset(data.PhaseA.IsLossLock) .SetRawValue(record.Time, P1, L1, sat.IonoLenOfL1ByDifferL1L2) .Build().Value; IonoFitTable.NewRow(); IonoFitTable.AddItem("Epoch", time); IonoFitTable.AddItem("FittedIonoAndAmbiValue", smootherP1.CurrentRaw.FittedIonoAndAmbiValue); //var test = TestSmoothRangeBuilder.GetOrCreate("Test") // .SetReset(data.PhaseA.IsLossLock) // .SetRawValue(record.Time, P1, L1) // .Build().Value; //var differ = test - P1s; //int iii = 0; var P2s = 0.0; if (!isShowL1Only) { P2s = smootherP2 .SetReset(data.PhaseB.IsLossLock) .SetRawValue(record.Time, P2, L2, sat.IonoLenOfL2ByDifferL1L2) .Build().Value; } #endregion //二次多项式平滑比较 var lsSP1Smoother = TimedSmoothValueBuilderManager.GetOrCreate("P1"); var lsSP2Smoother = TimedSmoothValueBuilderManager.GetOrCreate("P2"); double lsSP1 = 0, lsSP2 = 0; if (isShowPoly) { foreach (var item in bufferStream.MaterialBuffers) { lsSP1Smoother.SetRawValue(item.Time, item.SatObsData.RangeA.Value); lsSP2Smoother.SetRawValue(item.Time, item.SatObsData.RangeB.Value); } if (data.PhaseA.IsLossLock) { lsSP1 = P1; lsSP1Smoother.SetReset(data.PhaseA.IsLossLock); } else { lsSP1 = lsSP1Smoother.SetReset(data.PhaseA.IsLossLock) .SetRawValue(time, P1) .SetSmoothTime(time) .Build(); } if (data.PhaseB.IsLossLock) { lsSP2 = P2; lsSP2Smoother.SetReset(data.PhaseB.IsLossLock); } else { lsSP2 = lsSP2Smoother.SetReset(data.PhaseB.IsLossLock) .SetRawValue(time, P2) .SetSmoothTime(time) .Build(); } } table.NewRow(); table.AddItem("Epoch", record.Time); //table.AddItem("L1", L1); //table.AddItem("L2", L2); table.AddItem("P1", P1); if (!isShowL1Only) { table.AddItem("P2", P2); } table.AddItem("P1S", P1s); if (!isShowL1Only && isShowPoly) { table.AddItem("P2S", P2s); } if (isShowPoly) { table.AddItem("LsP1S", lsSP1); } if (!isShowL1Only) { table.AddItem("LsP2S", lsSP2); } } progressBarComponent1.Full(); BindDataSource(table); EnableRunButton(true); Geo.Winform.TableObjectViewForm form = new Geo.Winform.TableObjectViewForm(IonoFitTable); form.Show(); // tableObjectStorages.WriteAllToFileAndClearBuffer(); var span = DateTime.Now - start;// = DateTime.Now; log.Info("计算完毕,耗时 : " + span); }