/// <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); }
/// <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); } }
/// <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); }
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); }
/// <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); }
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(); }
/// <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); }
/// <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); }
/// <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; //存起来分析结果 } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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); }
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); }
/// <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(); }
/// <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; }
/// <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); }
/// <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); }
/// <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); }