public string BuidFileString(EpochLgoAscBaseLine file) { StringBuilder sb = new StringBuilder(); sb.Append(GetHeaderString()); sb.Append(BuildContent(file)); return(sb.ToString()); }
public void Write(EpochLgoAscBaseLine file) { StringBuilder sb = new StringBuilder(); var txt = BuidFileString(file); using (StreamWriter writer = new StreamWriter(new FileStream(FilePath, FileMode.Create), Encoding.Default)) { writer.Write(txt); } }
public void WriteOld(EpochLgoAscBaseLine file) { StringBuilder sb = new StringBuilder(); using (StreamWriter writer = new StreamWriter(new FileStream(FilePath, FileMode.Create), Encoding.Default)) { WriterHeader(writer); var net = file.GetBaseLineNet(); foreach (var kv in file.BaseLines) { var line = kv.Value; var item = kv.Value.Baseline; var xyz = item.ApproxXyzOfRov; //流动站坐标 writer.WriteLine("@#" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RovName, 16) + " " + ToString(item.ApproxXyzOfRov, 15, 4) + " MEAS" + " " + item.EstimatedRmsXyzOfRov.StdDev.Length.ToString("G5") + " 12"); writer.WriteLine("@&" + ToString(item.CovaMatrix, item.StdDev)); writer.WriteLine("@E " + ToString(line.ErrorEllipse)); //基线内容 writer.WriteLine("@+" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RefName, 16) + " " + ToString(item.ApproxXyzOfRef, 15, 4)); writer.WriteLine("@-" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RovName, 16) + " " + ToString(item.EstimatedVector, 15, 4)); writer.WriteLine("@=" + ToString(item.CovaMatrix, item.StdDev)); writer.WriteLine("@:" + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRef.Height, 14) + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRef.Offset, 14) ); writer.WriteLine("@;" + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRov.Height, 14) + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRov.Offset, 14) ); writer.WriteLine("@*" + ToString(item.Epoch)); writer.WriteLine("@E " + ToString(line.ErrorEllipse)); // @: 1.4580 0.0000 //@; 1.4110 0.0000 //@*13.11.2018 04:23:42 } } }
private StringBuilder BuildContent(EpochLgoAscBaseLine file) { StringBuilder sb = new StringBuilder(); var net = file.GetBaseLineNet(); foreach (var kv in file.BaseLines) { var line = kv.Value; var item = kv.Value.Baseline; var xyz = item.ApproxXyzOfRov; //流动站坐标 sb.AppendLine("@#" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RovName, 16) + " " + ToString(item.ApproxXyzOfRov, 15, 4) + " MEAS" + " " + item.EstimatedRmsXyzOfRov.StdDev.Length.ToString("G5") + " 12"); sb.AppendLine("@&" + ToString(item.CovaMatrix, item.StdDev)); sb.AppendLine("@E " + ToString(line.ErrorEllipse)); //基线内容 sb.AppendLine("@+" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RefName, 16) + " " + ToString(item.ApproxXyzOfRef, 15, 4)); sb.AppendLine("@-" + Geo.Utils.StringUtil.FillSpaceRight(item.BaseLineName.RovName, 16) + " " + ToString(item.EstimatedVector, 15, 4)); sb.AppendLine("@=" + ToString(item.CovaMatrix, item.StdDev)); sb.AppendLine("@:" + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRef.Height, 14) + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRef.Offset, 14) ); sb.AppendLine("@;" + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRov.Height, 14) + " " + Geo.Utils.StringUtil.FillSpaceLeft(line.AntennaBiasOfRov.Offset, 14) ); sb.AppendLine("@*" + ToString(item.Epoch)); sb.AppendLine("@E " + ToString(line.ErrorEllipse)); // @: 1.4580 0.0000 //@; 1.4110 0.0000 //@*13.11.2018 04:23:42 } return(sb); }
/// <summary> /// 构建 /// </summary> /// <param name="net"></param> /// <returns></returns> public EpochLgoAscBaseLine Build(BaseLineNet net) { EpochLgoAscBaseLine file = new EpochLgoAscBaseLine(); if (!String.IsNullOrWhiteSpace(net.Name)) { file.Name = net.Name; } else { file.Name = "新建文件"; } foreach (var item in net.KeyValues) { file.BaseLines.Add(item.Key, new LgoAscBaseLine(item.Value)); } return(file); }
/// <summary> /// 读取文件 /// </summary> /// <returns></returns> public MultiEpochLgoAscBaseLineFile Read() { var file = new MultiEpochLgoAscBaseLineFile(); file.Name = Path.GetFileName(FilePath); file.Header = LoadHeader(); string line = null; using (StreamReader reader = new StreamReader(FilePath)) { LgoAscPoint currentPoint = null; LgoAscBaseLine currentLine = null; EpochLgoAscBaseLine epochLgoAscBaseLine = null; bool isInPoint = true; while ((line = reader.ReadLine()) != null) { var label = line.Substring(0, 2); if (label == LgoAscLable.HeaderLines) { continue; } //跳过头部 var content = Geo.Utils.StringUtil.SubString(line, 2); switch (label) { case LgoAscLable.PointAndCoordinateInformation: { currentPoint = ParsePoint(content); isInPoint = true; } break; case LgoAscLable.ReferencePointOfBaseline: { var xyz = ParseNamedXyz(content); //由于第一次无法将名称读完,因此只能读完后再存储 currentLine = new LgoAscBaseLine(); currentLine.LineName.RefName = xyz.Name; currentLine.Baseline.ApproxXyzOfRef = xyz.Value; isInPoint = false; } break; case LgoAscLable.BaselineVectorComponents: { var xyz = ParseNamedXyz(content); currentLine.Baseline.BaseLineName.RovName = xyz.Name; currentLine.Baseline.EstimatedVectorRmsedXYZ.Value = xyz.Value; //流动站坐标位于基线上方 if (currentPoint != null && currentPoint.Name == xyz.Name) { currentLine.Baseline.ApproxXyzOfRov = currentPoint.XYZ; } else { currentLine.Baseline.ApproxXyzOfRov = currentLine.Baseline.ApproxXyzOfRef + xyz.Value; } currentLine.Baseline.BaseLineName.Init(); isInPoint = false; } break; case LgoAscLable.VarianceCovarianceOfPoint: { double sigma0; var cova = ParseCovaMatrix(content, out sigma0); currentPoint.CovaMatrix = new Matrix(cova); } break; case LgoAscLable.VarianceCovarianceOfBaseLine: { double sigma0; var cova = ParseCovaMatrix(content, out sigma0); currentLine.Baseline.StdDev = sigma0; currentLine.Baseline.CovaMatrix = new Matrix(cova); currentLine.Baseline.EstimatedVectorRmsedXYZ.Rms = new XYZ(Math.Sqrt(cova[0, 0]), Math.Sqrt(cova[1, 1]), Math.Sqrt(cova[2, 2])); } break; case LgoAscLable.ErrorEllipseAbsolute: { var result = ParseErrorEllipse(content); if (isInPoint) { currentPoint.ErrorEllipse = result; } else { currentLine.ErrorEllipse = result; } } break; case LgoAscLable.DateTimeOfFirstCommonEpoch: { currentLine.Epoch = ParseEpoch(content); file.GetOrCreate(currentLine.Epoch).Set(currentLine); } break; case LgoAscLable.ReferenceAntennaHeightAndOffset: { currentLine.AntennaBiasOfRef = ParseHeightOffset(content); } break; case LgoAscLable.RoverAntennaHeightAndOffset: { currentLine.AntennaBiasOfRov = ParseHeightOffset(content); } break; default: break; } } //最后保存最后的次基线 var epochFile = file.GetOrCreate(currentLine.Epoch); epochFile.Set(currentLine); } return(file); }