Пример #1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="pathes"></param>
 public WideLaneOfBsdSolver(ObjectTableManager SmoothedMwValue, SatelliteNumber BasePrn, int MinSiteCount, int MinEpoch, string OutputDirectory = null)
     : base("WL", BasePrn, OutputDirectory)
 {
     this.MinSiteCount    = MinSiteCount;
     this.MinEpoch        = MinEpoch;
     this.SmoothedMwValue = SmoothedMwValue;
 }
Пример #2
0
        /// <summary>
        /// 读取PPP模糊度结果,单位:米
        /// </summary>
        /// <param name="inputPathes"></param>
        /// <param name="isRemoveCsPrn"></param>
        /// <returns></returns>
        public static ObjectTableManager ReadPppAmbiResultInLength(string[] inputPathes, bool isRemoveCsPrn)
        {
            //读取PPP定位结果,主要为提取模糊度参数,这里注意原始为以米为单位,
            var rawPppResultTables = ObjectTableManager.Read(inputPathes);

            //对读入的PPP结果文件做一些必要的处理
            //去掉表名称的“_Params”,读入时,已经去掉了。
            //rawPppResultTables.ReplaceTableName("_Params", "");

            //首先删除无关历元和列
            rawPppResultTables.SetIndexColName("Epoch");
            var smartTalbes = rawPppResultTables.GetRepalcedColNameTable(new string[] { ParamNames.PhaseLengthSuffix, "_Nλ", "_N位", "_位N" }); //后者为字符编码错误

            //移除周跳的卫星
            if (isRemoveCsPrn)
            {
                RemoveCycleSlipedSat(smartTalbes);
            }

            foreach (var item in smartTalbes)
            {
                item.RemoveCols(new string[] { "CycleSlipe", Gnsser.ParamNames.Du, Gnsser.ParamNames.De, Gnsser.ParamNames.Dn, Gnsser.ParamNames.Dx, Gnsser.ParamNames.Dy, Gnsser.ParamNames.Dz, "cDt_r", "C*dtr", "StdDev", "WetTrop" }); // 删除不参与计算的无关列
                //key.RemoveEmptyRowsOf(BasePrn + "_Nλ"); // 删除没有基准数据的行
                //key.RemoveEmptyCols(); //删除空行
            }

            return(smartTalbes);
        }
Пример #3
0
        /// <summary>
        /// 获取表格
        /// </summary>
        /// <param name="outDirectory"></param>
        /// <returns></returns>
        public ObjectTableManager GetTable(string outDirectory, SatelliteNumber basePrn)
        {
            log.Info("开始提取表格 " + this.Name);
            DateTime           start  = DateTime.Now;
            ObjectTableManager result = new ObjectTableManager(outDirectory);

            foreach (var epochVals in this.Data)
            {
                foreach (var satVals in epochVals.Value.Data)
                {
                    var prn = satVals.Key;
                    if (satVals.Value.Count == 0)
                    {
                        continue;
                    }

                    var talbe = result.GetOrCreate(prn + "-" + basePrn);
                    talbe.NewRow();
                    talbe.AddItem("Epoch", epochVals.Key);
                    talbe.AddItem(satVals.Value);
                }
            }
            var span = DateTime.Now - start;

            log.Info("提取表格完毕,耗时: " + span);
            return(result);
        }
Пример #4
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);
        }
Пример #5
0
        /// <summary>
        /// 构建基准星时段对象。
        /// </summary>
        /// <param name="satEleTables"></param>
        /// <returns></returns>
        private PeriodPrnManager BuildPeriodBasePrn(ObjectTableManager satEleTables)
        {
            PeriodPrnManager PeriodPrnManager = null;
            var minSat      = namedIntControl_minSiteCount.GetValue();
            var minEpoch    = namedIntControl_minEpoch.GetValue();
            var baseSiteEle = fileOpenControl_satEleOfBaseSite.FilePath;

            if (baseSiteEle.Contains("SatEle.xls"))
            {
                ObjectTableReader reader = new ObjectTableReader(baseSiteEle);
                var satEleTable          = reader.Read();
                log.Info("成功读取卫星高度角文件");
                PeriodFixedSatSelector BasePrnSelector = new PeriodFixedSatSelector(satEleTable, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSameSat);
                PeriodPrnManager = BasePrnSelector.Select();
            }
            else if (baseSiteEle.Contains(".xls"))
            {
                PeriodPrnManager = PeriodPrnManager.ReadFromFile(baseSiteEle);
            }
            else
            {
                PeriodPrnManager = new PeriodFixedSatSelector(satEleTables.First, namedFloatControl1AngleCut.Value, TimePeriodCount, IsExpandPeriodOfSameSat).Select();
            }
            return(PeriodPrnManager);
        }
        /// <summary>
        /// 读取到历元存储对象
        /// </summary>
        /// <param name="tables"></param>
        /// <returns></returns>
        public static MultiSiteEpochValueStorage ReadToEpochStorage(ObjectTableManager tables)
        {
            MultiSiteEpochValueStorage multiSiteStorage = new MultiSiteEpochValueStorage("无电离层双差结果");

            foreach (var table in tables)
            {
                MultiSatEpochRmsNumeralStorage multiSatStorage = multiSiteStorage.GetOrCreate(table.Name);
                var indexName = table.GetIndexColName();
                foreach (var row in table.BufferedValues)
                {
                    var epoch = (Time)row[indexName];
                    foreach (var item in row)
                    {
                        if (item.Key == indexName)
                        {
                            continue;
                        }
                        var prn = SatelliteNumber.Parse(item.Key);
                        var val = (double)item.Value;
                        multiSatStorage.GetOrCreate(epoch).Add(prn, new RmsedNumeral(val, 0));
                    }
                }
            }
            return(multiSiteStorage);
        }
Пример #7
0
        protected override void Run(string[] inputPathes)
        {
            var SmoothedMwValue        = ObjectTableManager.Read(inputPathes);
            WideLaneOfBsdSolver solver = null;
            var espan = enabledTimePeriodControl1.GetEnabledValue();

            if (espan.Enabled)
            {
                var span = espan.Value;
                SmoothedMwValue = SmoothedMwValue.GetSub(span.StartDateTime, span.EndDateTime);
            }

            solver = new WideLaneOfBsdSolver(SmoothedMwValue, BasePrn, namedIntControl_minSiteCount.Value, this.namedIntControl_minEpoch.Value, OutputDirectory);
            solver.Run();

            this.BindTableA(solver.FractionValueTables.First);
            //输出
            if (this.checkBox_outputInt.Checked)
            {
                solver.IntValueTables.WriteAllToFileAndClearBuffer();
            }
            if (this.checkBox_outputFraction.Checked)
            {
                solver.FractionValueTables.WriteAllToFileAndClearBuffer(solver.FractionValueTables.First);
            }
            if (this.checkBox_outputSumery.Checked)
            {
                solver.SummeryTables.WriteAllToFileAndClearBuffer();
            }
        }
Пример #8
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);
            }
        }
        /// <summary>
        /// 移除周跳卫星结果
        /// </summary>
        /// <param name="smartTalbes"></param>
        private static void RemoveCycleSlipedSat(ObjectTableManager smartTalbes)
        {
            var csKey = "CsOrRemoved";

            foreach (var table in smartTalbes)
            {
                foreach (var row in table.BufferedValues)
                {
                    if (row.ContainsKey(csKey))
                    {
                        var csStr           = row[csKey].ToString();
                        var prns            = csStr.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
                        var keysToBeRemoved = new List <string>();
                        foreach (var prn in prns)
                        {
                            foreach (var key in row.Keys)
                            {
                                if (key.Contains(prn))
                                {
                                    keysToBeRemoved.Add(key);
                                }
                            }
                        }
                        foreach (var item in keysToBeRemoved)
                        {
                            row.Remove(item);
                        }
                    }
                }
            }
        }
Пример #10
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);
        }
Пример #11
0
        private BaseLineNetManager LoadBaseLineNets()
        {
            var tables      = ObjectTableManager.Read(InputBaselinePathes, ".");
            var table       = tables.Combine();                                   //合并所有的表格
            var BaseLineNet = BaseLineNetManager.Parse(table, periodSpanMinutes); //时段网

            return(BaseLineNet);
        }
Пример #12
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="Directory"></param>
 /// <param name="Name"></param>
 public AioAdjustFileBuilder(string Directory, string Name = "平差文件")
 {
     AdjustTables = new ObjectTableManager(Directory);
     if (!String.IsNullOrWhiteSpace(Name))
     {
         AdjustTables.Name = Name;
     }
 }
Пример #13
0
        /// <summary>
        /// 提取异步GNSS网
        /// </summary>
        /// <param name="pathes"></param>
        /// <param name="periodSpanMinutes">不同时段间隔,间隔内认为是同一时段,单位:分</param>
        /// <returns></returns>
        public static BaseLineNetManager Load(string[] pathes, double periodSpanMinutes)
        {
            var tables = ObjectTableManager.Read(pathes, ".");
            //合并所有的表格
            var table      = tables.Combine();
            var phaselNets = BaseLineNetManager.Parse(table, periodSpanMinutes);//时段网

            return(phaselNets);
        }
Пример #14
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="BasePrn">基准卫星</param>
        /// <param name="FloatAmbiSolution">PPP模糊度浮点解,未做差分,单位为周。</param>
        /// <param name="IntValueOfDifferWL">宽巷MW差分值,整型。</param>
        public NarrowLaneOfBsdSolver(SatelliteNumber BasePrn, ObjectTableManager FloatAmbiSolution, ObjectTableManager IntValueOfDifferWL, string OutputDirectory, bool IsPppAmbiInCycleOrLen = true)
            : base("NL", BasePrn, OutputDirectory)
        {
            this.FloatAmbiSolution     = FloatAmbiSolution;
            this.IntValueOfDifferWL    = IntValueOfDifferWL;
            this.OutputDirectory       = OutputDirectory;
            this.IsPppAmbiInCycleOrLen = IsPppAmbiInCycleOrLen;

            Init();
        }
Пример #15
0
 /// <summary>
 /// 构造函数。基于表对象。
 /// </summary>
 /// <param name="SmoothedMwValue"></param>
 /// <param name="PeriodPrnManager"></param>
 /// <param name="OutputDirectory"></param>
 public MultiPeriodBsdProductSolver(ObjectTableManager FloatAmbiguitiesOfPpp, ObjectTableManager SmoothedMwValue, PeriodPrnManager PeriodPrnManager, int minSite = 3, int minEpoch = 10, string OutputDirectory = null)
 {
     MaxAllowedDiffer           = 0.25;
     this.MinSiteCount          = minSite;
     this.MinEpoch              = minEpoch;
     this.FloatAmbiguitiesOfPpp = FloatAmbiguitiesOfPpp;
     this.PeriodPrnManager      = PeriodPrnManager;
     this.OutputDirectory       = (OutputDirectory != null)? OutputDirectory : Setting.TempDirectory;
     this.SmoothedMwValue       = SmoothedMwValue;
 }
Пример #16
0
 /// <summary>
 /// 周跳探测,并进行标记,而不修复。 默认构造函数。
 /// </summary>
 public MwCycleSlipDetectorOld()
 {
     MaxDeltaTime  = 121;
     MaxNumLambdas = 10.0;
     lambdaLimit   = MaxNumLambdas * 0.862; //limit to declare cycle slip based on lambdas( LambdaLW= 0.862 m) ,对于北斗,应该考虑
     this.IsUsingRecordedCsInfo = true;
     CycleSlipStorage           = new InstantValueStorage();
     log.Debug("采用了MW方法探测周跳。");
     TableObjectManager = new ObjectTableManager();
     //  satData = new SortedDictionary<SatelliteNumber, List<DataItem>>();
 }
Пример #17
0
        private void button_run_Click(object sender, EventArgs e)
        {
            //手动输入
            double levelFixed    = this.namedFloatControl_fixedErrorLevel.GetValue();
            double verticalFixed = this.namedFloatControl_fixedErrorVertical.GetValue();
            double levelCoeef    = this.namedFloatControl_levelCoefOfProprotion.GetValue();
            double verticalCoeef = this.namedFloatControl_verticalCoefOfProprotion.GetValue();
            var    GnssReveiverNominalAccuracy = new GnssReveiverNominalAccuracy(levelFixed, verticalFixed, levelCoeef, verticalCoeef);

            var periodSpanMinutes = this.namedFloatControl_periodSpanMinutes.GetValue();

            var path = this.fileOpenControl_input.FilePath;

            if (!File.Exists(path))
            {
                Geo.Utils.FormUtil.ShowWarningMessageBox("没有文件!在下无能为力!"); return;
            }

            var pathes = this.fileOpenControl_input.FilePathes;

            var tables = ObjectTableManager.Read(pathes, ".");
            //合并所有的表格
            var rawTable = tables.Combine();

            BaseLineNets = BaseLineNetManager.Parse(rawTable, periodSpanMinutes);  //时段网

            this.AllSychTrilateralQualities = BaseLineNets.BuildTriangularClosureQualies(GnssReveiverNominalAccuracy);

            //同步环闭合差计算
            ObjectTableStorage totalSyncErrorTable = BaseLineNets.BuildSyncTrilateralErrorTable(AllSychTrilateralQualities);



            //复测基线较差,所有与第一个作差
            var PeriodsRepeatErrors = BaseLineNets.BuildRepeatBaselineError();
            var worst = PeriodsRepeatErrors.GetWorst();

            if (worst != null)
            {
                StringBuilder sb = new StringBuilder();
                sb.AppendLine("复测基线较差最弱边:" + worst.ToString());
                this.richTextBoxControl_textResult.Text += "\r\n" + sb.ToString();
            }

            this.PeriodsRepeatErrorslQualities = BaseLineNets.BuildRepeatBaselingQulities(PeriodsRepeatErrors, GnssReveiverNominalAccuracy);
            //生成所有表格
            ObjectTableStorage repeatErrorTable = BaseLineNets.BuildRepeatBaselingErrorTable(PeriodsRepeatErrorslQualities, GnssReveiverNominalAccuracy);

            this.objectTableControl_syncclosureError.DataBind(totalSyncErrorTable);
            this.objectTableControl_closureErrorOfRepeatBaseline.DataBind(repeatErrorTable);
            this.objectTableControl_rawData.DataBind(rawTable);

            this.tabControl_res.SelectedTab = this.tabPage_allSync;
        }
Пример #18
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);
        }
        /// <summary>
        /// 读取模糊度
        /// </summary>
        /// <param name="inputPathes"></param>
        /// <param name="isRemoveCsPrn"></param>
        /// <param name="isInLenthOrCycle"></param>
        /// <param name="waveLen">如果设为周,则必须设定波长</param>
        /// <returns></returns>
        public static ObjectTableManager ReadAmbiResult(string[] inputPathes, bool isRemoveCsPrn, bool isInLenthOrCycle = false, double waveLen = 1)
        {
            ObjectTableManager smartTalbes = ReadAmbiResultInDefaultUnit(inputPathes, isRemoveCsPrn);

            if (!isInLenthOrCycle)
            {
                var abmiResultInCycle = smartTalbes.GetNewTableByDivision(waveLen, false, "");
                return(abmiResultInCycle);
            }
            return(smartTalbes);
        }
Пример #20
0
        private void button_exortTable_Click(object sender, EventArgs e)
        {
            if (objectTableControl1.TableObjectStorage == null)
            {
                return;
            }
            var TableManager = new ObjectTableManager();

            TableManager.Add(objectTableControl1.TableObjectStorage);
            TableManager.WriteAllToFileAndCloseStream();
            Geo.Utils.FormUtil.ShowIfOpenDirMessageBox(TableManager.OutputDirectory);
        }
Пример #21
0
        private void button_outputOneTable_Click(object sender, EventArgs e)
        {
            CheckAndReadObsFile();
            var table = new ObsFileToTableBuilder().Build(this.ObsFile);

            table.Name = System.IO.Path.GetFileNameWithoutExtension(this.ObsPath);
            ObjectTableManager mgr = new ObjectTableManager(Setting.GnsserConfig.TempDirectory);

            mgr.Add(table);
            mgr.WriteAllToFileAndClearBuffer();
            Geo.Utils.FormUtil.ShowOkAndOpenDirectory(mgr.OutputDirectory);
        }
Пример #22
0
        /// <summary>
        /// 用于显示
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetLineTable()
        {
            ObjectTableManager tables = new ObjectTableManager();

            foreach (var item in this.KeyValues)
            {
                var table = item.Value.GetLineTable();
                tables[item.Key.ToDefualtPathString()] = table;
            }
            ObjectTableStorage result = tables.Combine();

            return(result);
        }
Пример #23
0
        /// <summary>
        /// 运行
        /// </summary>
        public override void Run()
        {
            //----------基于测站--------
            //基于测站的MW星间单差,消除了测站硬件延迟
            log.Debug("基于测站的MW星间单差");
            this.SiteDifferMwTables = SmoothedMwValue.GetNewByMinusCol(BasePrn + "", "", true);

            //----------基于卫星---------
            //基于卫星的MW星间单差,各个测站针对同一卫星差分值显示在同一个表格中
            this.FloatValueTables = SiteDifferMwTables.GetSameColAssembledTableManager("FloatOf" + ProductTypeMarker);

            //生成结果,包括一些数据过滤工作
            base.BuildProducts();
        }
Пример #24
0
        /// <summary>
        /// 基线表
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetLineTable()
        {
            int netIndex = 0;
            ObjectTableManager tableObjects = new ObjectTableManager();

            foreach (var item in this)
            {
                var table = item.GetLineTable();
                table.Name += netIndex + "_net";
                tableObjects.Add(table);
                netIndex++;
            }
            return(tableObjects.Combine());
        }
Пример #25
0
        protected override void Run(string inputPath)
        {
            base.Run(inputPath);

            var obsFileReader = new RinexObsFileReader(inputPath);
            var ObsFile       = obsFileReader.ReadObsFile();
            var table         = new ObsFileToTableBuilder().Build(ObsFile);

            ObjectTableManager mgr = new ObjectTableManager(this.OutputDirectory);

            mgr.Add(table);
            mgr.WriteAllToFileAndClearBuffer();
            // Geo.Utils.FormUtil.ShowOkAndOpenDirectory(mgr.OutputDirectory);
        }
Пример #26
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="AdjustmentType"></param>
        /// <param name="OutDirectory"></param>
        /// <param name="ProgressNotifier"></param>
        public CommonFileAdjuster(AdjustmentType AdjustmentType = AdjustmentType.卡尔曼滤波, string OutDirectory = null, IProgressViewer ProgressNotifier = null)
        {
            if (String.IsNullOrWhiteSpace(OutDirectory))
            {
                OutDirectory = Setting.TempDirectory;
            }
            this.OutDirectory = OutDirectory;
            Geo.Utils.FileUtil.CheckOrCreateDirectory(OutDirectory);
            this.AdjustmentType = AdjustmentType;
            ResultTables        = new ObjectTableManager(OutDirectory);
            IsCancel            = false;
            this.ProgressViewer = ProgressNotifier;

            adjuster = AdjusterFactory.Create(AdjustmentType);
        }
Пример #27
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();
        }
Пример #28
0
 /// <summary>
 /// 构造函数。
 /// </summary>
 /// <param name="SmoothedMwValue"></param>
 /// <param name="PeriodPrnManager"></param>
 /// <param name="OutputDirectory"></param>
 public MultiPeriodWideLaneOfBsdSolver(ObjectTableManager SmoothedMwValue, PeriodPrnManager PeriodPrnManager, int minSat = 1, int minEpoch = 1, bool IsOutputInEachDirectory = false, string OutputDirectory = null)
 {
     this.MinSatCount      = minSat;
     this.MinEpoch         = minEpoch;
     this.PeriodPrnManager = PeriodPrnManager;
     if (OutputDirectory != null)
     {
         this.OutputDirectory = OutputDirectory;
     }
     else
     {
         this.OutputDirectory = Setting.TempDirectory;
     }
     this.SmoothedMwValue         = SmoothedMwValue;
     this.IsOutputInEachDirectory = IsOutputInEachDirectory;
 }
Пример #29
0
        private void ProduceAndShow(MultiSitePeriodValueStorage result)
        {
            //计算历元产品,可以查看变化。
            var basePrn = baseSatSelectingControl1.SelectedPrn;

            if (basePrn.SatelliteType != SatelliteType.G)
            {
                MessageBox.Show("请选择GPS系统!目前似乎还不支持其它系统,如果支持了请尝试高版本先,若还没有请 Email To: [email protected]");
                return;
            }
            var maxRms         = namedFloatControl_maxRms.GetValue();
            var outIntervalSec = namedFloatControl_intervalOFProduct.GetValue() * 60.0;

            var table       = result.GetTable();
            var product     = result.GetProductTableOfAllDiffer();
            var fracTable   = result.GetAverageRoundFractionTable();
            var detailTable = result.GetDetailTable();
            var finalOne    = result.GetFinalFcbOfBsd(BasePrn);
            var bsdProduct  = result.GetWideLaneFcb(BasePrn);


            ObjectTableManager.WriteTable(table, this.OutputDirectory);
            ObjectTableManager.WriteTable(fracTable, this.OutputDirectory);
            ObjectTableManager.WriteTable(detailTable, this.OutputDirectory);
            ObjectTableManager.WriteTable(product, this.OutputDirectory);

            this.ShowInfo("Final wide fcb:\r\n" + Geo.Utils.StringUtil.ToString(finalOne));
            this.BindTableA(table);
            this.BindTableB(product);
            this.BindTableC(fracTable);

            var differInts = result.GetAllPossibleDifferInts();

            foreach (var item in differInts.GetData())
            {
                var tab = item.Value.GetDetailTable();
                //tab.Name = item.Key + "_宽巷星间单差整数";
                tab.Name = item.Key + "_Bsd.WLInt";
                ObjectTableManager.WriteTable(tab, this.OutputDirectory);
            }
            //计算归算的最终产品
            WriteFinal(bsdProduct);

            WriteEpochProducts(result, basePrn, maxRms, outIntervalSec);

            Geo.Utils.FormUtil.ShowOkAndOpenDirectory(Setting.TempDirectory);
        }
Пример #30
0
        /// <summary>
        /// 处理一个卫星
        /// </summary>
        /// <param name="sectionMw"></param>
        /// <param name="basePrn"></param>
        /// <returns></returns>
        private void ProcessOneBaseSat(ObjectTableManager sectionMw, SatelliteNumber basePrn)
        {
            using (var wLSolver = new WideLaneOfBsdSolver(sectionMw, basePrn, MinSiteCount, MinEpoch, this.OutputDirectory))
            {
                wLSolver.MaxAllowedDiffer = MaxAllowedDiffer;
                wLSolver.Run();

                using (var nLSolver = new NarrowLaneOfBsdSolver(basePrn, FloatAmbiguitiesOfPpp, wLSolver.IntValueTables, this.OutputDirectory))
                {
                    nLSolver.MinEpoch         = MinEpoch;
                    nLSolver.MinSiteCount     = MinSiteCount;
                    nLSolver.MaxAllowedDiffer = MaxAllowedDiffer;
                    nLSolver.Run();

                    TotalObsCountOfNL += nLSolver.TotalObsCount;

                    if (this.IsOutputInt && nLSolver.IntValueTables != null)
                    {
                        nLSolver.IntValueTables.WriteAllToFileAndClearBuffer();
                    }
                    if (this.IsOutputFraction && nLSolver.FractionValueTables != null)
                    {
                        nLSolver.FractionValueTables.WriteAllToFileAndClearBuffer();
                    }
                    if (this.IsOutputSummary && nLSolver.SummeryTables != null)
                    {
                        nLSolver.SummeryTables.WriteAllToFileAndClearBuffer();
                    }
                }

                //输出
                if (this.IsOutputInt && wLSolver.IntValueTables != null)
                {
                    wLSolver.IntValueTables.WriteAllToFileAndClearBuffer();
                }
                if (this.IsOutputFraction && wLSolver.FractionValueTables != null)
                {
                    wLSolver.FractionValueTables.WriteAllToFileAndClearBuffer();
                }
                if (this.IsOutputSummary && wLSolver.SummeryTables != null)
                {
                    wLSolver.SummeryTables.WriteAllToFileAndClearBuffer();
                }

                TotalObsCountOfWL += wLSolver.TotalObsCount;
            }
        }