private void Solver_ResultProduced(SimpleGnssResult entity, ObsFileProcessStreamer <MultiSiteEpochInfo, SimpleGnssResult> streamer) { if (entity == null) { return; } if (entity is SingleSiteGnssResult) { SingleSiteGnssResult result = entity as SingleSiteGnssResult; this.Coords.Add(new NamedRmsXyz(entity.Name, new RmsedXYZ(result.EstimatedXyz, result.EstimatedXyzRms))); } if (entity is IEstimatedBaseline) { var result = entity as IEstimatedBaseline; this.Coords.Add(new NamedRmsXyz(entity.Name, new RmsedXYZ(result.EstimatedXyzOfRov, XYZ.Parse(entity.ResultMatrix.Estimated.GetRmsVector())))); } if (this.Coords.Count == 0) { foreach (var item in streamer.Current) { Coords.Add(new NamedRmsXyz(item.SiteName, new RmsedXYZ(item.SiteInfo.ApproxXyz, XYZ.Zero))); } } }
/// <summary> /// 批量写入文件,写入批量和最后一个结果。 /// </summary> /// <param name="results">计算结果</param> public void Write(List <SingleSiteGnssResult> results) { if (results == null || results.Count == 0) { return; } SingleSiteGnssResult last = results[results.Count - 1]; Write(results, last); }
/// <summary> /// 计算完毕一个测站 /// </summary> /// <param name="Solver"></param> void OneSolver_Processed(SingleSiteGnssSolveStreamer Solver) { var entity = Solver.CurrentGnssResult; SingleSiteGnssResult result = entity as SingleSiteGnssResult; this.OutputFinalResult(result); this.AppendFinalResultOnUI(result); //只截获和显示这一个,文件输出将自动处理 if (Solver == GnssSolver) { this.SetResultsToUITable(this.GnssSolver.TableTextManager); } }
private void Solver_ResultProduced(SimpleGnssResult entity, ObsFileProcessStreamer <EpochInformation, SimpleGnssResult> streamer) { if (entity == null) { return; } if (entity is SingleSiteGnssResult) { SingleSiteGnssResult result = entity as SingleSiteGnssResult; this.Coords.Add(new NamedRmsXyz(entity.Name, new RmsedXYZ(result.EstimatedXyz, result.EstimatedXyzRms))); } if (entity is IWithEstimatedBaseline) { var result = entity as IWithEstimatedBaseline; this.Coords.Add(new NamedRmsXyz(entity.Name, result.GetEstimatedBaseline().EstimatedRmsXyzOfRov)); } }
/// <summary> /// 写到文件 /// </summary> /// <param name="path"></param> /// <param name="result"></param> public static void WriteToSinex(string path, SingleSiteGnssResult result) { File.WriteAllText(path, ResultSinexBuillder.Build(result).ToString(), Encoding.Default); }
/// <summary> /// 当批量和最优结果分开时,或有参数有可能为NULL时,采用此方法。 /// </summary> /// <param name="results"></param> /// <param name="best"></param> public void Write(List <SingleSiteGnssResult> results, SingleSiteGnssResult best) { WriteFinal(best); WriteDetails(results); }
/// <summary> /// 单站结果 /// </summary> /// <param name="mainSb"></param> /// <param name="firstObject"></param> private void BuildGeneraInfoTableOfSingleSite(StringBuilder mainSb, SingleSiteGnssResult firstObject) { var last = Results.Last(); var sb = new StringBuilder(); sb.Append(BuildTableHeaderCell("Num")); sb.Append(BuildTableHeaderCell("Name")); sb.Append(BuildTableHeaderCell("StdDev")); if (firstObject.EstimatedXyz != null) { sb.Append(BuildTableHeaderCell("X")); sb.Append(BuildTableHeaderCell("Y")); sb.Append(BuildTableHeaderCell("Z")); sb.Append(BuildTableHeaderCell("Lon")); sb.Append(BuildTableHeaderCell("Lat")); sb.Append(BuildTableHeaderCell("Height")); sb.Append(BuildTableHeaderCell("RmsE")); sb.Append(BuildTableHeaderCell("RmsN")); sb.Append(BuildTableHeaderCell("RmsU")); } if (last.HasParamAccuracyInfos) { foreach (var kv in firstObject.ParamAccuracyInfos.KeyValues) { sb.Append(BuildTableHeaderCell(kv.Key)); } } sb.Append(BuildTableHeaderCell("Epoch")); var row = BuildTableRow(sb.ToString()); mainSb.Append(row); var format = "G5"; if (HasResults()) { int i = 1; foreach (var item in this.Results) { if (item == null) { continue; } sb = new StringBuilder(); var result = item as SingleSiteGnssResult; sb.Append(BuildTableCell(i)); sb.Append(BuildTableCell(result.Material.Name)); sb.Append(BuildTableCell(result.ResultMatrix.StdDev.ToString(format))); if (result.EstimatedXyz != null) { sb.Append(BuildTableCell(result.EstimatedXyz.X.ToString("0.#####"))); sb.Append(BuildTableCell(result.EstimatedXyz.Y.ToString("0.#####"))); sb.Append(BuildTableCell(result.EstimatedXyz.Z.ToString("0.#####"))); sb.Append(BuildTableCell(new DMS(result.GeoCoord.Lon).ToReadableDms())); sb.Append(BuildTableCell(new DMS(result.GeoCoord.Lat).ToReadableDms())); sb.Append(BuildTableCell(result.GeoCoord.Height.ToString("0.#####"))); var tmsenu = CoordTransformer.LocaXyzToEnu(result.EstimatedXyzRms, result.ApproxXyz); sb.Append(BuildTableCell(Math.Abs(tmsenu.E).ToString(format))); sb.Append(BuildTableCell(Math.Abs(tmsenu.N).ToString(format))); sb.Append(BuildTableCell(Math.Abs(tmsenu.U).ToString(format))); } if (last.HasParamAccuracyInfos) { foreach (var kv in result.ParamAccuracyInfos.KeyValues) { var val = kv.Value.RmsValue.Value; var isOk = result.ParamAccuracyInfos.IsOk(kv.Value); var str = (val * 1e3).ToString("0.000"); if (!isOk) { str = "<b class='red'>" + str + "</b>"; } sb.Append(BuildTableCell(str)); } } sb.Append(BuildTableCell(result.ReceiverTime)); var rowContent = BuildTableRow(sb.ToString()); mainSb.Append(rowContent); mainSb.AppendLine(); i++; } } }