예제 #1
0
        public string BuidFileString(EpochLgoAscBaseLine file)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append(GetHeaderString());
            sb.Append(BuildContent(file));

            return(sb.ToString());
        }
예제 #2
0
        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);
            }
        }
예제 #3
0
        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
                }
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        /// <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);
        }
예제 #6
0
        /// <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);
        }