Exemple #1
0
        /// <summary>
        /// 获取表格,以Key为列名
        /// </summary>
        /// <param name="tableName">表名称</param>
        /// <returns></returns>
        public ObjectTableStorage GetDetailTable(string tableName = "所有站MW时段详情")
        {
            if (DetailTable != null)
            {
                log.Info("详细表 DetailTable 已经计算,直接返回!"); return(DetailTable);
            }
            DetailTable = new ObjectTableStorage(tableName);
            int index = 0;

            foreach (var siteMw in this.Data)
            {
                siteMw.Value.AddDetailRowsToTable(DetailTable, ref index, "Site", siteMw.Key);
            }
            return(DetailTable);
        }
        /// <summary>
        /// 构建表
        /// </summary>
        /// <param name="fixedParams"></param>
        /// <returns></returns>
        private static ObjectTableStorage BuildFixedParamTable(WeightedVector fixedParams)
        {
            ObjectTableStorage result = new ObjectTableStorage("FixedParams");

            for (int i = 0; i < fixedParams.Count; i++)
            {
                result.NewRow();
                result.AddItem("Index", i);
                result.AddItem("Name", fixedParams.ParamNames[i]);
                result.AddItem("TimePeriod", TimePeriod.MaxPeriod);
                result.AddItem("Value", fixedParams[i]);
                result.AddItem("Rms", 1e-10);
            }
            return(result);
        }
Exemple #3
0
        /// <summary>
        /// 移除收敛前的行
        /// </summary>
        /// <param name="epochParamTable"></param>
        /// <param name="convergencePeriods"></param>
        private static void RemoveConvergencedRows(ref ObjectTableStorage epochParamTable, BaseDictionary <string, TimePeriod> convergencePeriods)
        {
            //移除初始未收敛的历元
            foreach (var epochResult in convergencePeriods.KeyValues)
            {
                var colName = epochResult.Key;
                var indexOf = epochParamTable.GetRowIndexOfIndexCol(epochResult.Value.End);
                if (indexOf == -1)
                {
                    continue;
                }

                epochParamTable.RemoveRowsOfCol(colName, 0, indexOf);
            }
        }
Exemple #4
0
        /// <summary>
        /// 对象表
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetObjectTable()
        {
            ObjectTableStorage result = new ObjectTableStorage();
            var rmsVec = this.GetRmsedVector();

            for (int i = 0; i < rmsVec.Count; i++)
            {
                var item = rmsVec.GetItem(i);
                result.NewRow();
                result.AddItem("Name", item.Name);
                result.AddItem("Value", item.Value);
                result.AddItem("Rms", item.Rms);
            }
            return(result);
        }
Exemple #5
0
        private static ObjectTableStorage ParseLineTable(string path)
        {
            ObjectTableStorage tableA = null;

            if (path.ToUpper().EndsWith("ASC"))
            {
                tableA = ParseAscLine(path);
            }
            else if (path.EndsWith(Setting.TextTableFileExtension))
            {
                tableA = ObjectTableReader.Read(path);
            }

            return(tableA);
        }
Exemple #6
0
        /// <summary>
        /// 所有文件的精度结果统计表
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetTotalFileParamRmsTable()
        {
            ObjectTableStorage     result        = new ObjectTableStorage("参数 RMS");
            RmsedNumeralDictionary rmsedNumerals = new RmsedNumeralDictionary();

            foreach (var fileResult in ConvergenceResult.Data)
            {
                var fileName           = fileResult.Key;
                var convergencePeriods = fileResult.Value;
                var epochParamTable    = EpochParamDataTables.Get(fileName);

                ExtractRmsInfoAddToTableRow(ref result, epochParamTable, convergencePeriods);
            }
            return(result);
        }
Exemple #7
0
        private void button_view_Click(object sender, EventArgs e)
        {
            bool isValOrRms = checkBox_valOrRMS.Checked;
            var  name       = namedStringControl1.GetValue();
            var  timePeriod = timePeriodControl1.TimePeriod;
            var  strs       = name.Split(new char[] { ';', ',' }, StringSplitOptions.RemoveEmptyEntries);

            var ionoService = GlobalIgsGridIonoDcbService.Instance;

            ObjectTableStorage table = new ObjectTableStorage();

            for (var time = timePeriod.StartDateTime; time < timePeriod.EndDateTime; time += TimeSpan.FromDays(1))
            {
                table.NewRow();
                table.AddItem("Epoch", time);
                foreach (var item in strs)
                {
                    if (item.Length == 3 && SatelliteNumber.IsPrn(item))
                    {
                        var prn = SatelliteNumber.Parse(item);
                        var val = ionoService.GetDcb(new Time(time), prn);
                        if (isValOrRms)
                        {
                            table.AddItem(prn, val.Value);
                        }
                        else
                        {
                            table.AddItem(prn, val.Rms);
                        }
                    }
                    else
                    {
                        var val = ionoService.GetDcb(new Time(time), item);
                        if (isValOrRms)
                        {
                            table.AddItem(item, val.Value);
                        }
                        else
                        {
                            table.AddItem(item, val.Rms);
                        }
                    }
                }
            }


            objectTableControl1.DataBind(table);
        }
        /// <summary>
        /// 网点间边长、方位角
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetCombinedTable()
        {
            ObjectTableStorage table = new ObjectTableStorage("网点间边长、方位角");

            foreach (var item in this.CombinedResults.KeyValues)
            {
                var obj = item.Value;
                table.NewRow();
                table.AddItem("Name", item.Key);
                table.AddItem("Distance", obj.Distance);
                table.AddItem("Azimuth", obj.Azimuth);
                table.AddItem("AzimuthDMS", obj.AzimuthDMS);
                table.AddItem("MA", obj.MA);
            }
            return(table);
        }
        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();
        }
Exemple #10
0
        /// <summary>
        /// 获取基线表格
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetBaselineTable()
        {
            ObjectTableStorage table = new ObjectTableStorage("基线结果");

            foreach (var kv in this.KeyValues)
            {
                if (kv.Value.EstimatedResult == null)
                {
                    continue;
                }

                table.NewRow();
                table.AddItem(kv.Value.EstimatedResult.GetObjectRow());
            }
            return(table);
        }
        /// <summary>
        /// 距离平差结果
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetDistanceTable()
        {
            ObjectTableStorage table = new ObjectTableStorage("距离平差结果");

            foreach (var item in this.DistanceResults.KeyValues)
            {
                var obj = item.Value;
                table.NewRow();
                table.AddItem("Name", item.Key);
                table.AddItem("AdjustValue", obj.AdjustValue);
                table.AddItem("MeasureValue", obj.MeasureValue);
                table.AddItem("MSec", obj.MSec);
                table.AddItem("Ri", obj.Ri);
            }
            return(table);
        }
        /// <summary>
        /// 观测值表格
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetObsTable()
        {
            ObjectTableStorage result = new ObjectTableStorage("原始观测值表格");

            foreach (var eq in this)
            {
                var q    = eq.RightVector;
                var name = eq.Name;
                result.NewRow();

                AddNameValueToTable(result, name);

                result.AddItem((IVector)q);
            }
            return(result);
        }
Exemple #13
0
        /// <summary>
        /// 针对某一个卫星绘制
        /// </summary>
        /// <param name="prn"></param>
        /// <returns></returns>
        private ObjectTableStorage BuildObjectTable(SatelliteNumber prn)
        {
            List <TimedRinexSatObsData> records = ObsFile.GetEpochTimedObservations(prn);
            ObjectTableStorage          table   = new ObjectTableStorage();

            foreach (var record in records)
            {
                table.NewRow();
                table.AddItem("Epoch", record.Time);
                foreach (var item in record.SatObsData)
                {
                    table.AddItem(item.Key, item.Value.Value);
                }
            }
            return(table);
        }
Exemple #14
0
        /// <summary>
        /// 批量计算,增加一个,最后统计
        /// </summary>
        /// <param name="table"></param>
        public void Add(ObjectTableStorage table)
        {
            string fileKey = BuildFileKey(table.Name);

            var newTable = GetParamsOnlyTable(table);

            newTable.Name = fileKey;

            //一个文件一个。
            var dic = CalculateConvergeceTimePeriods(newTable);

            lock (locker)
            {
                ConvergenceResult[fileKey]    = dic;
                EpochParamDataTables[fileKey] = newTable; //存起来分析结果
            }
        }
Exemple #15
0
        /// <summary>
        /// 解析表格获取对象
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static MultiSitePeriodValueStorage ParseDetailTable(ObjectTableStorage table)
        {
            MultiSitePeriodValueStorage store = new MultiSitePeriodValueStorage(table.Name);

            store.DetailTable = table;
            foreach (var row in table.BufferedValues)
            {
                var site   = row["Site"].ToString();
                var prn    = SatelliteNumber.Parse(row["Name"].ToString());
                var period = TimePeriod.Parse(row["Group"].ToString());
                var val    = (double)row["Value"];
                var rms    = (double)row["RMS"];

                store.GetOrCreate(site).GetOrCreate(prn)[period] = new RmsedNumeral(val, rms);
            }
            return(store);
        }
Exemple #16
0
        /// <summary>
        /// 构建表格
        /// </summary>
        /// <param name="convertedXy"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static ObjectTableStorage BuildTable(List <NamedRmsXyz> convertedXy, string name)
        {
            ObjectTableStorage resultTable = new ObjectTableStorage(name);

            foreach (var item in convertedXy)
            {
                resultTable.NewRow();
                resultTable.AddItem(GeoParamNames.Name, item.Name);
                resultTable.AddItem(GeoParamNames.X, item.X);
                resultTable.AddItem(GeoParamNames.Y, item.Y);
                resultTable.AddItem(GeoParamNames.Z, item.Z);
                resultTable.AddItem(GeoParamNames.RmsX, item.Value.Rms.X);
                resultTable.AddItem(GeoParamNames.RmsY, item.Value.Rms.Y);
                resultTable.AddItem(GeoParamNames.RmsZ, item.Value.Rms.Z);
            }
            return(resultTable);
        }
Exemple #17
0
        /// <summary>
        /// 构建头部信息
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public RinexObsFileHeader BuidHeader(ObjectTableStorage table)
        {
            var colNames      = table.ParamNames;
            var indexName     = table.GetIndexColName();
            var secondColName = colNames[1];


            var startEpochTime        = (DateTime)table.FirstIndex;
            var endEpoch              = (DateTime)table.LastIndex;
            var interval              = (int)((DateTime)table.SecondIndex - startEpochTime).TotalSeconds;
            RinexObsFileHeader header = new RinexObsFileHeader();

            header.Interval  = interval;
            header.StartTime = new Geo.Times.Time(startEpochTime);
            header.EndTime   = new Geo.Times.Time(endEpoch);
            header.Version   = secondColName.Length >= 7 ? 3.02 : 2.11;
            header.Comments.Add("Build from " + table.Name);
            var obsCodes = new Dictionary <SatelliteType, List <string> >();

            foreach (var name in colNames)
            {
                if (indexName == name)
                {
                    continue;
                }
                var prn = SatelliteNumber.Parse(name);
                if (!obsCodes.ContainsKey(prn.SatelliteType))
                {
                    obsCodes[prn.SatelliteType] = new List <string>();
                }
                var list = obsCodes[prn.SatelliteType];

                var code = name.Substring(4);

                if (!list.Contains(code))
                {
                    list.Add(code);
                }
            }
            header.ObsCodes          = obsCodes;
            header.MarkerType        = obsCodes.Count > 1 ? "M" : header.SatelliteTypes[0] + "";
            header.SiteInfo.SiteName = table.Name.Substring(0, 4);


            return(header);
        }
Exemple #18
0
        /// <summary>
        /// 获取向量改正数对象表
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetObjectTable()
        {
            ObjectTableStorage result = new ObjectTableStorage();
            int i = 1;

            foreach (var kv in this.KeyValues)
            {
                foreach (var item in kv.Value.KeyValues)
                {
                    result.NewRow();
                    result.AddItem(ParamNames.Index, i++);
                    result.AddItem(ParamNames.TimePeriod, kv.Key);
                    result.AddItem(item.Value.GetObjectRow());
                }
            }
            return(result);
        }
Exemple #19
0
        public ObjectTableStorage BuildObjectTable()
        {
            ObjectTableStorage resultTable = new ObjectTableStorage("平差结果");

            foreach (var kv in this.Corrected)
            {
                var name      = kv.Key;
                var corredXyz = kv.Value;
                var corr      = this.Correction[name];

                resultTable.NewRow();
                var row = GetObjectRow(name, corredXyz, corr.Value);
                resultTable.AddItem(row);
            }

            return(resultTable);
        }
Exemple #20
0
        /// <summary>
        /// 构建数据表格。
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private ObjectTableStorage BuildObjectTable(SatObsDataType type)
        {
            var EpochInfoBuilder     = new RinexEpochInfoBuilder(ObsFile.Header.SatelliteTypes);
            ObjectTableStorage table = new ObjectTableStorage();

            foreach (var obs in ObsFile)
            {
                var epochInfo = EpochInfoBuilder.Build(obs);
                table.NewRow();
                table.AddItem("Epoch", epochInfo.ReceiverTime.ToShortTimeString());
                foreach (var sat in epochInfo)
                {
                    table.AddItem(sat.Prn + "", sat[type].Value + "");
                }
            }
            table.EndRow();
            return(table);
        }
Exemple #21
0
        /// <summary>
        /// 单频平滑伪距
        /// </summary>
        /// <param name="prn"></param>
        /// <param name="PhaseSmoothRangeBulider"></param>
        /// <param name="records"></param>
        private void SingleFreqPhaseSmoothRange(SatelliteNumber prn, NamedCarrierSmoothedRangeBuilderManager PhaseSmoothRangeBulider, List <TimedRinexSatObsData> records)
        {
            ObjectTableStorage table = new ObjectTableStorage();

            foreach (var record in records)
            {
                table.NewRow();
                table.AddItem("Epoch", record.Time);
                var data = record.SatObsData;

                var waveLenL1 = Frequence.GetFrequence(prn.SatelliteType, 1).WaveLength;
                var waveLenL2 = Frequence.GetFrequence(prn.SatelliteType, 2).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 smootherP1 = PhaseSmoothRangeBulider.GetOrCreate("P1");
                var smootherP2 = PhaseSmoothRangeBulider.GetOrCreate("P2");

                var P1s = smootherP1
                          .SetReset(data.PhaseA.IsLossLock)
                          .SetRawValue(record.Time, P1, L1, 0)
                          .Build().Value;
                table.AddItem("P1", P1);
                table.AddItem("P1S", P1s);

                if (data.PhaseB != null)
                {
                    var P2s = smootherP2
                              .SetReset(data.PhaseB.IsLossLock)
                              .SetRawValue(record.Time, P2, L2, 0)
                              .Build().Value;
                    table.AddItem("P2", P2);
                    //table.AddItem("P1S_old", P1s);
                    table.AddItem("P2S", P2s);
                }
            }

            BindDataSource(table);
        }
Exemple #22
0
        private static ObjectTableStorage BuildObjectTable(List <NamedXyzEnu> NamedXyzEnus, string name = "比较结果")
        {
            ObjectTableStorage table = new ObjectTableStorage(name);

            foreach (var item in NamedXyzEnus)
            {
                table.NewRow();
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.Name), item.Name);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.X), item.X);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.Y), item.Y);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.Z), item.Z);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.E), item.E);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.N), item.N);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.U), item.U);
                table.AddItem(Geo.Utils.ObjectUtil.GetPropertyName <NamedXyzEnu>(m => m.Len), item.Len);
            }

            return(table);
        }
Exemple #23
0
        private ObjectTableStorage BuildObjectTable()
        {
            ObjectTableStorage table = new ObjectTableStorage();

            foreach (var item in this)
            {
                var epcoh = item;
                foreach (var sat in epcoh)
                {
                    table.NewRow();
                    foreach (var facs in sat.MultipathFactors)
                    {
                        table.AddItem(facs.Key, facs.Value);
                    }
                    table.EndRow();
                }
            }
            return(table);
        }
        /// <summary>
        /// 生成一个表格
        /// </summary>
        /// <param name="startTime"></param>
        /// <param name="endTime"></param>
        /// <param name="interval"></param>
        /// <param name="siteXyz"></param>
        /// <param name="SatelliteTypes"></param>
        /// <param name="AngleCut"></param>
        /// <param name="EphemerisService"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static ObjectTableStorage BuildTable(
            Time startTime, Time endTime, double interval,
            XYZ siteXyz,
            List <SatelliteType> SatelliteTypes,
            double AngleCut = 10,
            IEphemerisService EphemerisService = null,
            string tableName = "卫星高度角")
        {
            var table = new ObjectTableStorage(tableName);

            if (siteXyz == null)
            {
                return(null);
            }
            for (Time time = startTime; time <= endTime; time += interval)
            {
                table.NewRow();
                table.AddItem("Epoch", time);

                foreach (var sat in EphemerisService.Prns)
                {
                    if (!SatelliteTypes.Contains(sat.SatelliteType))
                    {
                        continue;
                    }

                    var eph = EphemerisService.Get(sat, time);
                    if (eph == null)
                    {
                        continue;
                    }

                    var p   = CoordTransformer.XyzToGeoPolar(eph.XYZ, siteXyz);
                    var ele = p.Elevation;
                    if (ele >= AngleCut)
                    {
                        table.AddItem(sat, ele);
                    }
                }
                table.EndRow();
            }
            return(table);
        }
Exemple #25
0
 /// <summary>
 /// 转换一个历元
 /// </summary>
 /// <param name="table"></param>
 /// <param name="epochInfo"></param>
 private static void ObsToRow(ObjectTableStorage table, RinexEpochObservation epochInfo)
 {
     table.NewRow();
     //加下划线,确保排序为第一个
     table.AddItem("Epoch", epochInfo.ReceiverTime.DateTime);
     foreach (var sat in epochInfo)
     {
         foreach (var phase in sat)
         {
             var satprn = phase.Key;
             var val    = phase.Value.Value;
             if (Geo.Utils.DoubleUtil.IsValid(val))
             {
                 table.AddItem(sat.Prn + "_" + phase.Key, val);
             }
         }
     }
     table.EndRow();
 }
Exemple #26
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="table"></param>
        public TypedIndexHelper(ObjectTableStorage table)
        {
            this.Table = table;

            double interval = 10;

            if (table.FirstIndex is Time)
            {
                IsTime   = true;
                interval = (Time)table.SecondIndex - (Time)table.FirstIndex;
            }
            if (table.FirstIndex is DateTime)
            {
                IsDataTime = true;
                interval   = ((DateTime)table.SecondIndex - (DateTime)table.FirstIndex).TotalSeconds;
            }
            this.Interval        = DoubleUtil.GetInterval(interval, 0, 10);
            this.BaseIndexObject = table.FirstIndex;
        }
Exemple #27
0
        /// <summary>
        /// 用于显示
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetPhaseTable()
        {
            ObjectTableStorage table = new ObjectTableStorage(this.Name);
            int i = 0;

            foreach (var netKv in this.KeyValues)
            {
                foreach (var item in netKv.Value)
                {
                    table.NewRow();
                    table.AddItem("Number", i);
                    table.AddItem("Name", item.Name);

                    table.AddItem("Phase", netKv.Key);
                }
                i++;
            }

            return(table);
        }
Exemple #28
0
        /// <summary>
        /// 针对某一个卫星绘制
        /// </summary>
        /// <param name="prn"></param>
        /// <returns></returns>
        public ObjectTableStorage BuildObjectTable(SatelliteNumber prn, bool show1Only)
        {
            List <TimedRinexSatObsData> records = this.GetEpochTimedObservations(prn);
            ObjectTableStorage          table   = new ObjectTableStorage();

            foreach (var record in records)
            {
                table.NewRow();
                table.AddItem("Epoch", record.Time);
                foreach (var item in record.SatObsData)
                {
                    if (show1Only && !item.Key.Contains("1"))
                    {
                        continue;
                    }
                    table.AddItem(item.Key, item.Value.Value);
                }
            }
            return(table);
        }
Exemple #29
0
        /// <summary>
        /// 重复基线较差表格
        /// </summary>
        /// <param name="qualities"></param>
        /// <param name="GnssReveiverNominalAccuracy"></param>
        /// <param name="isBadOnly">是否只显示超限的</param>
        /// <returns></returns>
        public ObjectTableStorage BuildRepeatBaselingErrorTable(Dictionary <BufferedTimePeriod, RepeatErrorQualityManager> qualities, GnssReveiverNominalAccuracy GnssReveiverNominalAccuracy, bool isBadOnly = false)
        {
            var asynchClosureError = new ObjectTableManager();
            int netIndex           = 1;

            foreach (var pkv in qualities)
            {
                var period   = pkv.Key;
                var totalNet = pkv.Value;
                var netName  = (netIndex + "-0");
                var data     = qualities[period];
                ObjectTableStorage lineTable = BaseLineNet.BuildRepeatBaseLineCheckResultTable(data, netName, isBadOnly);//用于显示,查看

                asynchClosureError.Add(lineTable);
                netIndex++;
            }
            var asyncErrorTable = asynchClosureError.Combine("复测基线较差");

            return(asyncErrorTable);
        }
        /// <summary>
        /// 平差坐标及其精度
        /// </summary>
        /// <returns></returns>
        public ObjectTableStorage GetCoordTable()
        {
            ObjectTableStorage table = new ObjectTableStorage("平差坐标及其精度");

            foreach (var item in this.AdjustCoordResults.KeyValues)
            {
                var obj = item.Value;
                table.NewRow();
                table.AddItem("Name", item.Key);
                table.AddItem("X", obj.XY.X);
                table.AddItem("Y", obj.XY.Y);
                if (obj.MXY != null)
                {
                    table.AddItem("MX", obj.MXY.X);
                    table.AddItem("MY", obj.MXY.Y);
                    table.AddItem("MP", obj.MP);
                }
            }
            return(table);
        }