Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        /// <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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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);
        }
Пример #6
0
        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();
        }
Пример #7
0
        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);
        }