예제 #1
0
        protected override void Run(string[] obsPathes)
        {
            // var satEleDir = fileOpenControl_satElevation.FilePath;// @"D:\Data\2013[甘肃CORS数据]\1103\GpsOnly\GPS卫星高度角\";
            var pppResults        = fileOpenControl_pppResults.GetFilePathes("_Params" + Setting.TextTableFileExtension);// Directory.GetFiles(satEleDir);
            var angleCut          = double.Parse(textBox_angleCut.Text);
            var abmiResultInCycle = PppTableResultFileReader.ReadPppAmbiResultInCycle(pppResults);

            var SatElevatoinTableBuilder = new SatElevatoinTableBuilder(obsPathes, SatelliteTypes, Interval);
            var satEleTables             = SatElevatoinTableBuilder.Build();
            var mw = new MwTableBuilder(obsPathes, AngleCut, namedIntControl_emptyRowCount.Value, OutputDirectory, this.SatelliteTypes).Build();


            PeriodPrnManager PeriodPrnManager = BuildPeriodBasePrn(satEleTables);

            MultiPeriodBsdProductSolver solver = new MultiPeriodBsdProductSolver(abmiResultInCycle, mw, PeriodPrnManager);

            solver.MaxAllowedDiffer = namedFloatControl1maxAllowedDiffer.Value;
            solver.IsOutputFraction = IsOutputFraction;
            solver.IsOutputInt      = IsOutputInt;
            solver.IsOutputSummary  = IsOutputSummary;
            solver.Run();

            //var solver = new BsdAmbiSolver(obsPathes, pppResults, this.SatelliteTypes[0], angleCut, namedIntControl_minSiteCount.Value, this.namedIntControl_minEpoch.Value, OutputDirectory);

            //solver.Run();
        }
예제 #2
0
        /// <summary>
        /// 打开卫星高度角窗口
        /// </summary>
        /// <param name="FilePath"></param>
        public static void OpenSatElevationTableForm(object FilePath)
        {
            var table = SatElevatoinTableBuilder.BuildTable((string)FilePath, 10);

            Application.Run(new TableObjectViewForm(table));//保证在线程中也可以显示

            //TableObjectViewForm form = new TableObjectViewForm(table);
            // form.Show();
        }
예제 #3
0
        private ObjectTableStorage GetSatEleTable(string[] inputPathes)
        {
            ObjectTableStorage satEleTable = null;
            bool isInputCoord = this.checkBox_inputCoord.Checked;
            var  cutOffAngle  = namedFloatControl1AngleCut.GetValue();

            if (!isInputCoord)
            {
                log.Info("采用了文件输入高度角");
                if (inputPathes.Length == 0)
                {
                    Geo.Utils.FormUtil.ShowWarningMessageBox("请输入文件"); return(satEleTable);
                }
                var baseSiteEle = inputPathes[0];
                if (baseSiteEle.ToLower().EndsWith(Setting.SatElevationFileExtension.ToLower()))
                {
                    var reader = new ObjectTableReader(baseSiteEle);
                    satEleTable = reader.Read();
                }
                else if (baseSiteEle.ToLower().EndsWith("rnx") || baseSiteEle.ToLower().EndsWith("o"))//O文件
                {
                    satEleTable = SatElevatoinTableBuilder.BuildTable(baseSiteEle, cutOffAngle, GlobalNavEphemerisService.Instance);
                }
            }
            else//手动输入
            {
                log.Info("即将跟输入计算高度角信息");

                //输出的采样间隔
                TimeLooper looper = timeLoopControl1.GetTimeLooper();
                var        xyz    = XYZ.Parse(this.namedStringControl_coord.GetValue());
                satEleTable = SatElevatoinTableBuilder.BuildTable(looper, xyz, this.SatelliteTypes, cutOffAngle, GlobalNavEphemerisService.Instance, "卫星高度角");
            }

            return(satEleTable);
        }
예제 #4
0
        protected override void Run(string[] inputPathes)
        {
            string navFile = fileOpenControl_nav.GetFilePath();


            //输出的采样间隔
            TimeLooper looper  = timeLoopControl1.GetTimeLooper();
            var        builder = new SatElevatoinTableBuilder(inputPathes, this.SatelliteTypes, looper, namedFloatControl1AngleCut.Value);

            builder.OutputDirectory = this.OutputDirectory;
            builder.ProgressViewer  = this.ProgressBar;
            if (File.Exists(navFile))
            {
                var ephService = EphemerisDataSourceFactory.Create(navFile);
                builder.EphemerisService = ephService;
                log.Info("采用了星历服务 " + ephService);
            }
            var tableMgr = builder.Build();

            if (checkBox_enableStatistics.Checked)
            {
                int angleStep = 10;
                var table     = tableMgr.First;
                #region  卫星历元数统计
                var eleTable = new ObjectTableStorage(table.Name + "_不同高度截止角的历元数量统计");
                for (int i = 0; i <= 30; i = i + angleStep)
                {
                    eleTable.NewRow();
                    eleTable.AddItem("Elevation", i);
                    var count = table.GetCount(new Func <double, bool>(val => val >= i));
                    eleTable.AddItem(count);
                    eleTable.EndRow();
                }
                #endregion

                #region 卫星颗数统计
                var rowCountDics = new Dictionary <int, Dictionary <DateTime, int> >();
                for (int i = 0; i <= 30; i = i + angleStep)
                {
                    rowCountDics[i] = table.GetEachRowCount <DateTime>(new Func <double, bool>(val => val >= i));
                }

                var satCountTable = new ObjectTableStorage(table.Name + "_可用卫星数量统计");
                var first         = rowCountDics[0];
                foreach (var item in first)
                {
                    var index = item.Key;
                    satCountTable.NewRow();
                    satCountTable.AddItem("Epoch", index);
                    foreach (var rows in rowCountDics)
                    {
                        var val = rows.Value[index];
                        satCountTable.AddItem(rows.Key, val);
                    }
                    satCountTable.EndRow();
                }
                #endregion

                #region 卫星连续历元数统计
                var maxValTable             = new ObjectTableStorage(table.Name + "_最大数据统计");
                var maxSequentialCountTable = new ObjectTableStorage(table.Name + "_最大连续历元数量统计");
                var minSequentialCountTable = new ObjectTableStorage(table.Name + "_最小连续历元数量统计");
                var satPeriodCountTable     = new ObjectTableStorage(table.Name + "_卫星出现次数统计");
                for (int i = 0; i <= 30; i = i + angleStep)
                {
                    maxSequentialCountTable.NewRow();
                    maxSequentialCountTable.AddItem("Elevation", i);

                    minSequentialCountTable.NewRow();
                    minSequentialCountTable.AddItem("Elevation", i);

                    satPeriodCountTable.NewRow();
                    satPeriodCountTable.AddItem("Elevation", i);

                    maxValTable.NewRow();
                    maxValTable.AddItem("Elevation", i);

                    var dic = table.GetSequentialCountOfAllCol <DateTime>(new Func <double, bool>(val => val >= i));
                    foreach (var item in dic)
                    {
                        item.Value.Sort(new Comparison <Segment <DateTime> >((one, two) => (int)((two.End - two.Start) - (one.End - one.Start)).TotalSeconds));
                        //最大时段
                        var max     = item.Value[0];
                        var maxSpan = (max.End - max.Start).TotalHours;
                        maxSequentialCountTable.AddItem(item.Key, maxSpan);

                        //最大值
                        var maxval = table.GetMaxValue(item.Key, max.Start, max.End);
                        maxValTable.AddItem(item.Key, maxval);


                        //最小时段
                        var lastIndex = item.Value.Count - 1;
                        var min       = item.Value[lastIndex];
                        var minSpan   = (min.End - min.Start).TotalHours;
                        if (lastIndex == 0)
                        {
                            minSpan = 0;
                        }
                        minSequentialCountTable.AddItem(item.Key, minSpan);
                        //时段次数输出
                        satPeriodCountTable.AddItem(item.Key, item.Value.Count);
                    }

                    maxValTable.EndRow();
                    maxSequentialCountTable.EndRow();
                    minSequentialCountTable.EndRow();
                    satPeriodCountTable.EndRow();
                }

                #endregion


                if (checkBox_sortPrnSatistics.Checked)
                {
                    maxValTable.SortColumns();
                    eleTable.SortColumns();
                    maxSequentialCountTable.SortColumns();
                    minSequentialCountTable.SortColumns();
                    satPeriodCountTable.SortColumns();
                }

                tableMgr.Add(maxValTable);
                tableMgr.Add(satCountTable);
                tableMgr.Add(eleTable);
                tableMgr.Add(maxSequentialCountTable);
                tableMgr.Add(minSequentialCountTable);
                tableMgr.Add(satPeriodCountTable);
            }

            BindTableA(tableMgr.First);

            tableMgr.WriteAllToFileAndClearBuffer(tableMgr.First);
        }