コード例 #1
0
        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)));
                }
            }
        }
コード例 #2
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 增加参数到存储表
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void AddSecondParam(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            var table = TableTextManager.GetOrCreate(epoch.Name + Setting.EpochSecondParamFileExtension);

            table.NewRow();
            table.AddItem("Epoch", epoch.ReceiverTime);//ToShortTimeString());

            //table.AddItem((IVector)result.Adjustment.Estimated);
            foreach (var item in result.ResultMatrix.SecondParamNames)
            {
                table.AddItem(item, result.ResultMatrix.SecondEstimated[item]);
            }
            if (epoch.UnstablePrns.Count > 0 || epoch.RemovedPrns.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                if (epoch.UnstablePrns.Count > 0)
                {
                    sb.Append(String.Format(new EnumerableFormatProvider(), "{0}", epoch.UnstablePrns));
                }

                if (epoch.RemovedPrns.Count > 0)
                {
                    sb.Append(";" + String.Format(new EnumerableFormatProvider(), "{0}", epoch.RemovedPrns));
                }

                table.AddItem("CsOrRemoved", sb.ToString());
            }

            table.EndRow();
        }
コード例 #3
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 追加一个测量结果信息
        /// </summary>
        /// <param name="simpleResult"></param>
        public string BuildResultInfo(SimpleGnssResult simpleResult)
        {
            StringBuilder sb = new StringBuilder();

            if (simpleResult is BaseGnssResult)
            {
                BaseGnssResult result = (BaseGnssResult)simpleResult;
                //数据源信息
                AppendLine(sb, "数据源", result.Material.Name);

                if (result.Material is EpochInformation)
                {
                    var epochInfo = result.Material as EpochInformation;
                    var ObsInfo   = epochInfo.ObsInfo;
                    var SiteInfo  = epochInfo.SiteInfo;
                    BuildObsInfo(sb, ObsInfo);
                    BuildSiteInfo(sb, SiteInfo);
                    BuildContextInfo(sb, Context);
                    BuildAdjustInfo(sb, result.ResultMatrix);
                }

                if (result.HasEstimatedXyz)
                {
                    AppendLine(sb, "最终估值坐标:", result.EstimatedXyz);
                    AppendLine(sb, "最终估值坐标RMS:", result.EstimatedXyzRms);
                    AppendLine(sb, "大地坐标:", result.GeoCoord);
                }
            }
            return(sb.ToString());
        }
コード例 #4
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 模糊度固定解
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void AddAmbFixed(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            if (result.ResultMatrix.Estimated_PPPAR1 != null)
            {
                var tablenew = TableTextManager.GetOrCreate(epoch.Name + "PPPAR_Params");
                tablenew.NewRow();
                tablenew.AddItem("Epoch", epoch.ReceiverTime);//ToShortTimeString());
                tablenew.AddItem("dx", result.ResultMatrix.Estimated_PPPAR1[0]);
                tablenew.AddItem("dy", result.ResultMatrix.Estimated_PPPAR1[1]);
                tablenew.AddItem("dz", result.ResultMatrix.Estimated_PPPAR1[2]);
                tablenew.AddItem("clk", result.ResultMatrix.Estimated_PPPAR1[3]);
                tablenew.AddItem("trop", result.ResultMatrix.Estimated_PPPAR1[4]);
                tablenew.EndRow();

                var tablenew2 = TableTextManager.GetOrCreate(epoch.Name + "PPPAR_Params2");
                tablenew2.NewRow();
                tablenew2.AddItem("Epoch", epoch.ReceiverTime);//ToShortTimeString());
                tablenew2.AddItem("dx", result.ResultMatrix.Estimated_PPPAR2[0]);
                tablenew2.AddItem("dy", result.ResultMatrix.Estimated_PPPAR2[1]);
                tablenew2.AddItem("dz", result.ResultMatrix.Estimated_PPPAR2[2]);
                tablenew2.AddItem("clk", result.ResultMatrix.Estimated_PPPAR2[3]);
                tablenew2.AddItem("trop", result.ResultMatrix.Estimated_PPPAR2[4]);
                tablenew2.EndRow();
            }
        }   /// <summary>
コード例 #5
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 添加钟跳结果
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void CheckOrAddClockJump(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            if (this.PrevResult == null)
            {
                return;
            }

            if (result is SingleSiteGnssResult && PrevResult is SingleSiteGnssResult)
            {
                var    pre   = PrevResult as SingleSiteGnssResult;
                var    res   = result as SingleSiteGnssResult;
                double delta = res.RcvClkError - pre.RcvClkError;

                if (Math.Abs(delta) > 1e-4)
                {
                    log.Info(epoch.Name + "在 " + epoch.ReceiverTime + "捕获到一个钟跳!与上历元偏差:" + delta + ",改正数(s):" + res.RcvClkCorrection);

                    var table = TableTextManager.GetOrCreate(epoch.Name + "_ClockJump.cjump");
                    table.NewRow();
                    table.AddItem("Epoch", epoch.ReceiverTime);

                    table.AddItem("Value", delta.ToString("G9"));
                }
            }
        }
コード例 #6
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        }   /// <summary>

        /// 增加参数RMS到存储表
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void AddSecondParamRms(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            var tableRms = TableTextManager.GetOrCreate(epoch.Name + Setting.EpochSecondParamRmsFileExtension);

            tableRms.NewRow();
            tableRms.AddItem("Epoch", epoch.ReceiverTime);

            tableRms.AddItem(result.ResultMatrix.StdOfSecondEstimatedParam);

            if (epoch.UnstablePrns.Count > 0 || epoch.RemovedPrns.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                if (epoch.UnstablePrns.Count > 0)
                {
                    sb.Append(String.Format(new EnumerableFormatProvider(), "{0}", epoch.UnstablePrns));
                }

                if (epoch.RemovedPrns.Count > 0)
                {
                    sb.Append(";" + String.Format(new EnumerableFormatProvider(), "{0}", epoch.RemovedPrns));
                }

                tableRms.AddItem("CsOrRemoved", sb.ToString());
            }
            tableRms.EndRow();
        }
コード例 #7
0
ファイル: HtmlReportBuilder.cs プロジェクト: yxw027/GNSSer
 /// <summary>
 /// 统计一个结果
 /// </summary>
 /// <param name="result"></param>
 public void Add(SimpleGnssResult result)
 {
     if (result == null)
     {
         return;
     }
     Results.Add(result);
 }
コード例 #8
0
 private void Solver_ResultProduced(SimpleGnssResult product, ObsFileProcessStreamer <MultiSiteEpochInfo, SimpleGnssResult> arg2)
 {
     if (product is SingleSiteGnssResult)
     {
         var entity = product as SingleSiteGnssResult;
         this.Coords.Add(new NamedRmsXyz(entity.Name, new RmsedXYZ(entity.EstimatedXyz, entity.EstimatedXyzRms)));
     }
 }
コード例 #9
0
 /// <summary>
 /// 在界面上打印出执行结果,同时保存到日志中。
 /// 非差重要,必须输出,不然白算了。!!
 /// </summary>
 /// <param name="last"></param>
 protected void ShowResultOnSummaryTextbox(SimpleGnssResult last)
 {
     if (last == null)
     {
         return;
     }
     var val = last.ToShortTabValue(); log.Fatal(val); AppdendLineToSummaryString(val);
 }
コード例 #10
0
        /// <summary>
        /// 最后的计算结果显示计算结果在界面上
        /// </summary>
        /// <param name="last"></param>
        protected void AppendFinalResultOnUI(SimpleGnssResult last)
        {
            if (last == null)
            {
                return;
            }
            ShowResultOnSummary(last);//这个必须显示,不然全白算了

            //写入汇总文件,必须写,不然无法找到计算结果
            if (Setting.IsShowInfo)
            {
                ShowGeneralResultInfo(last);
            }

            if (IsShowData)
            {
                ShowAdjustMatrix(last);
            }

            if (last != null)
            {
                log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "RmsOfEstimated\t" + FormatVector(last.ResultMatrix.Estimated.GetRmsVector()));
                log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "Estimated\t" + FormatVector(last.ResultMatrix.Estimated));
                log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "ParamNames\t" + String.Format(new EnumerableFormatProvider(), "{0:\t}", last.ParamNames));
            }
            //写最后的值
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("Est and Rms:");
            sb.AppendLine(String.Format(new EnumerableFormatProvider(), "{0:,6.4 }", last.ResultMatrix.Estimated.ParamNames));
            var vector = last.ResultMatrix.Estimated.GetRmsedVector();
            int length = vector.Count;

            for (int i = 0; i < length; i++)
            {
                var rmsVal = vector.GetItem(i);
                if (i != 0)
                {
                    sb.Append(", ");
                }
                sb.Append(rmsVal.Value.ToString("G5"));
            }
            sb.AppendLine();
            for (int i = 0; i < length; i++)
            {
                var rmsVal = vector.GetItem(i);
                if (i != 0)
                {
                    sb.Append(", ");
                }
                sb.Append(rmsVal.Rms.ToString("G5"));
            }
            sb.AppendLine();

            log.Fatal(sb.ToString());
        }
コード例 #11
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 构建最终信息
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        public string BuildFinalInfo(SimpleGnssResult result)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("--------------- 计算配置信息 -------------------");
            sb.Append(BuildOptionInfo(Option));
            sb.AppendLine("--------------- 测站详情 -------------------");
            sb.Append(BuildResultInfo(result));

            return(sb.ToString());
        }
コード例 #12
0
        /// <summary>
        /// 在首个文本界面显示计算概略信息。
        /// </summary>
        protected void ShowGeneralResultInfo(SimpleGnssResult lastResult)
        {
            TimeSpan      span = DateTime.Now - StartTime;
            StringBuilder sb   = new StringBuilder();

            sb.AppendLine("耗时:\t" + DateTimeUtil.GetFloatString(span));

            ReadableGnssResultBuilder builder = new ReadableGnssResultBuilder();
            var info = builder.Build(lastResult);

            ShowInfo(sb.ToString() + info);
        }
コード例 #13
0
        /// <summary>
        /// 显示平差矩阵
        /// </summary>
        /// <param name="adjustResult"></param>
        protected void ShowAdjustMatrix(SimpleGnssResult adjustResult)
        {
            if (adjustResult == null)
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine(adjustResult.ResultMatrix.ToReadableText());
            var str = sb.ToString();

            ShowAdjustString(str);
        }
コード例 #14
0
        /// <summary>
        /// 输出结果。根据设置。
        /// </summary>
        /// <param name="GnssResults"></param>
        protected void OutputFinalResult(SimpleGnssResult GnssResult)
        {
            if (GnssResult == null)
            {
                return;
            }

            if (Option.IsOutputResult && GnssResult is BaseGnssResult)
            {
                log.Info(GnssResult.Name + ", " + GnssResult.ReceiverTime + ", 即将输出结果文件...");
                var writer = new GnssResultWriter(Option, this.Option.IsOutputEpochResult,
                                                  Option.IsOutputEpochSatInfo);

                writer.WriteFinal((BaseGnssResult)GnssResult);
            }
        }
コード例 #15
0
        /// <summary>
        /// 检查并进行正反算
        /// </summary>
        protected void CheckAndRunReverseSove()
        {
            while (this.OrdinalAndReverseCount > 0)
            {
                // GnssResultBuilder.Clear();

                this.IsInReversing = true;

                this.OrdinalAndReverseCount--;
                this.IsReversedDataSource = !this.IsReversedDataSource;

                var info = "数据流 即将进行 ";
                info += (this.IsReversedDataSource ? "反" : "正") + "算, ";
                info += "剩余单独计算次数 " + this.OrdinalAndReverseCount;

                log.Info(info);

                //Init();
                // BuildAndSetDataStream();//按照指定顺序,重新初始化数据流
                SetDataStreamAndInit();

                //是否清空输出缓存
                if (Option.IsClearOutBufferWhenReversing)
                {
                    ClearResultBuffer();

                    this.TableTextManager.Clear();
                }

                Running();

                var last1 = this.CurrentGnssResult;
                if (last1 != null && last1 is SimpleGnssResult)
                {
                    SimpleGnssResult last = last1 as SimpleGnssResult;
                    log.Info(GnssResultBuilder.BuildFinalInfo(last));

                    log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "ParamNames\t" + String.Format(new EnumerableFormatProvider(), "{0:\t}", last.ParamNames));
                    log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "RmsOfEstimated\t" + FormatVector(last.ResultMatrix.Estimated.GetRmsVector()));
                    log.Fatal(last.Name + "\t" + last.ReceiverTime + "\t" + "Estimated\t" + FormatVector(last.ResultMatrix.Estimated));
                }
            }

            this.IsInReversing = false;
        }
コード例 #16
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
 /// <summary>
 /// 增加DOP结果
 /// </summary>
 /// <param name="epoch"></param>
 /// <param name="result"></param>
 private void AddDop(ISiteSatObsInfo epoch, SimpleGnssResult result)
 {
     //无测站信息,或固定参考站,
     if ((result is SingleSiteGnssResult) && result.ParamNames.Contains(Gnsser.ParamNames.Dx))
     {
         var singleSiteResult = result as SingleSiteGnssResult;
         var sysName          = Geo.Utils.StringUtil.ToString(Option.SatelliteTypes, "_");
         var tableDOP         = TableTextManager.GetOrCreate(epoch.Name + sysName + Setting.EpochDopFileExtension);
         tableDOP.NewRow();
         tableDOP.AddItem("Epoch", singleSiteResult.ReceiverTime);
         tableDOP.AddItem("TotalPrns", epoch.EnabledSatCount);
         tableDOP.AddItem("GDOP", singleSiteResult.DilutionOfPrecision.GDOP);
         tableDOP.AddItem("PDOP", singleSiteResult.DilutionOfPrecision.PDOP);
         tableDOP.AddItem("HDOP", singleSiteResult.DilutionOfPrecision.HDOP);
         tableDOP.AddItem("VDOP", singleSiteResult.DilutionOfPrecision.VDOP);
         tableDOP.EndRow();
     }
 }
コード例 #17
0
        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));
            }
        }
コード例 #18
0
ファイル: DoubleDiffer.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 打印出执行结果
        /// </summary>
        /// <param name="last"></param>
        private void SaveLastResult(SimpleGnssResult last)
        {
            // if(BaseGnssResult )
            var projPath = Path.Combine(this.OupputDirecory, "Baseline.Summery.baseline");

            Geo.Utils.FileUtil.CheckOrCreateDirectory(this.OupputDirecory);

            //if (SiteInfoWriter == null)
            //{
            //    SiteInfoWriter = new SiteInfoWriter(projPath);
            //}
            ////SiteInfoWriter.Write(last.SiteInfo);
            //SiteInfoWriter.StreamWriter.Flush();

            var    ddResult = last as IonFreeDoubleDifferPositionResult;// DoubleDifferPositionResult;
            string msg      = last.Name + "\t"
                              + Geo.Utils.DateTimeUtil.GetFormatedDateTimeNow() + "\t"
                              + ddResult.ReceiverTime + "\t"
                              + ddResult.GetEstimatedBaseline().EstimatedVector.GetTabValues() + "\t"
            ;

            if (!File.Exists(projPath))
            {
                var titles = new StringBuilder();
                titles.Append("Name");
                titles.Append("\t");
                titles.Append("CaculateTime");
                titles.Append("\t");
                titles.Append("ReceiverTime");
                titles.Append("\t");
                titles.Append("X");
                titles.Append("\t");
                titles.Append("Y");
                titles.Append("\t");
                titles.Append("Z");
                titles.AppendLine();
                File.AppendAllText(projPath, titles.ToString());
            }

            File.AppendAllText(projPath, msg + "\r\n");
        }
コード例 #19
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 增加坐标到存储表,主要用于导航解算
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="gnssResult"></param>
        private void AddEpochCoord(ISiteSatObsInfo epoch, SimpleGnssResult gnssResult)
        {
            if (gnssResult is SingleSiteGnssResult)
            {
                var result = (SingleSiteGnssResult)gnssResult;
                var table  = TableTextManager.GetOrCreate(epoch.Name + Setting.EpochCoordFileExtension);
                table.NewRow();
                table.AddItem("Epoch", epoch.ReceiverTime); //ToShortTimeString());

                var dxyz = result.XyzCorrection;            // XYZ.Parse(result.Adjustment.Estimated);
                if (dxyz != null)
                {
                    var xyz = result.EstimatedXyz;
                    var geo = result.GeoCoord;
                    table.AddItem(Gnsser.ParamNames.X, xyz.X.ToString("0.0000"));
                    table.AddItem(Gnsser.ParamNames.Y, xyz.Y.ToString("0.0000"));
                    table.AddItem(Gnsser.ParamNames.Z, xyz.Z.ToString("0.0000"));
                    //精确到亚毫米
                    table.AddItem(Gnsser.ParamNames.Lon, geo.Lon.ToString("0.00000000"));
                    table.AddItem(Gnsser.ParamNames.Lat, geo.Lat.ToString("0.00000000"));
                    table.AddItem(Gnsser.ParamNames.Height, geo.Height.ToString("0.0000"));
                }
            }
            if (gnssResult is IEstimatedBaseline)
            {
                var result = (IEstimatedBaseline)gnssResult;
                var table  = TableTextManager.GetOrCreate(epoch.Name + Setting.EpochCoordFileExtension);
                table.NewRow();
                table.AddItem("Epoch", epoch.ReceiverTime);                    //ToShortTimeString());

                var xyz = result.EstimatedXyzOfRov;                            //.EstimatedXyz;
                var geo = Geo.Coordinates.CoordTransformer.XyzToGeoCoord(xyz); // result.GeoCoord;
                table.AddItem(Gnsser.ParamNames.X, xyz.X.ToString("0.0000"));
                table.AddItem(Gnsser.ParamNames.Y, xyz.Y.ToString("0.0000"));
                table.AddItem(Gnsser.ParamNames.Z, xyz.Z.ToString("0.0000"));
                //精确到亚毫米
                table.AddItem(Gnsser.ParamNames.Lon, geo.Lon.ToString("0.00000000"));
                table.AddItem(Gnsser.ParamNames.Lat, geo.Lat.ToString("0.00000000"));
                table.AddItem(Gnsser.ParamNames.Height, geo.Height.ToString("0.0000"));
            }
        }
コード例 #20
0
        /// <summary>
        /// 在结果上面显示参数名称行
        /// </summary>
        /// <param name="last"></param>
        protected void ShowResultTitleOnSummaryTextbox(SimpleGnssResult last)
        {
            if (last == null)
            {
                return;
            }

            this.Invoke(new Action(delegate()
            {
                if (this.OutputTextBoxes[1].Text.Length < 5)
                {
                    string msg = last.ToShortTabTitles();

                    if (this.Disposing || this.IsDisposed)
                    {
                        return;
                    }
                    //   var info = DateTimeUtil.GetFormatedTimeNow(true) + ":\t" + msg;
                    this.AppdendLineToSummaryString(msg);
                }
            }));
        }
コード例 #21
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 输出算后残差
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="gnssResult"></param>
        private void AddResidual(ISiteSatObsInfo epoch, SimpleGnssResult gnssResult)
        {
            var fileName = ResultFileNameBuilder.BuildEpochResidualFileName(epoch.Name);
            var table    = TableTextManager.GetOrCreate(fileName);

            table.NewRow();
            table.AddItem("Epoch", epoch.ReceiverTime);//ToShortTimeString());
            var names = gnssResult.ResultMatrix.ObsMatrix.Observation.ParamNames;
            int i     = 0;
            //var obs = gnssResult.ResultMatrix.ObsMatrix.Observation - gnssResult.ResultMatrix.ObsMatrix.FreeVector;
            var obs = gnssResult.ResultMatrix.PostfitResidual;//.ObsMatrix.Observation - gnssResult.ResultMatrix.ObsMatrix.FreeVector;

            foreach (var item in obs)
            {
                string name = i + "";
                if (names != null)
                {
                    name = names[i] ?? i + "";
                }
                table.AddItem(name, obs[i]);
                i++;
            }
        }
コード例 #22
0
        /// <summary>
        /// 处理一个历元
        /// </summary>
        /// <param name="epoch"></param>
        public override SimpleGnssResult Produce(EpochInformation epoch)
        {
            if (!this.EphemerisDataSource.TimePeriod.Contains(epoch.ReceiverTime))
            {
                this.IsCancel = true; log.Warn("星历结束,结束计算!" + this.EphemerisDataSource.TimePeriod);
            }
            if (epoch.Count == 0)
            {
                log.Error(epoch.ToShortString() + ", 没有可用卫星,是否系统选错了?"); return(null);
            }

            ISiteSatObsInfo  material = null;
            SimpleGnssResult result   = null;

            if (Solver is SingleSiteGnssSolver)
            {
                material = epoch;
                result   = ((SingleSiteGnssSolver)Solver).Get(epoch);
            }
            else if (Solver is SingleSitePeriodSolver) //单站多历元
            {
                PeriodInformationBuilder.Add(epoch);
                var period = PeriodInformationBuilder.Build();
                if (period == null || !period.Enabled)
                {
                    return(null);
                }
                material = period;
                result   = ((SingleSitePeriodSolver)Solver).Get(period);

                PeriodInformationBuilder.Data.Clear();
            }
            else if (Solver is CommonSingeSatGnssSolver || Solver is CommonSingePeriodSatGnssSolver) //单站多历元
            {
                material = epoch;

                if (!epoch.Contains(this.Prn))
                {//如果星历不存在则重新选星
                    if (this.Option.IsIndicatedPrn)
                    {
                        this.Prn = this.Option.IndicatedPrn;
                    }
                    else
                    {
                        //this.Prn = epoch.FirstKey;
                        this.Prn = epoch.GetMaxElevationPrn();
                        log.Info(this.Name + ", 最大高度角选星:" + this.Prn);
                    }
                }

                var sat = epoch.Get(this.Prn);
                if (sat == null)
                {
                    return(null);
                }
                if (Solver is CommonSingeSatGnssSolver)
                {
                    result = ((CommonSingeSatGnssSolver)Solver).Get(sat);
                }
                else if (Solver is CommonSingePeriodSatGnssSolver) //单站多历元
                {
                    if (PeriodSatelliteBuilder.Add(sat))
                    {
                        var period = PeriodSatelliteBuilder.Build();
                        if (period == null || !period.Enabled)
                        {
                            return(null);
                        }
                        //material = period;
                        result = ((CommonSingePeriodSatGnssSolver)Solver).Get(period);
                    }
                }
            }
            return(result);
        }
コード例 #23
0
 /// <summary>
 /// 显示一个
 /// </summary>
 /// <param name="last"></param>
 protected void ShowResultOnSummary(SimpleGnssResult last)
 {
     ShowResultTitleOnSummaryTextbox(last);
     ShowResultOnSummaryTextbox(last);
 }
コード例 #24
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 增加参数RMS到存储表
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void AddParamRms(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            var fileName = ResultFileNameBuilder.BuildEpochParamRmsFileName(epoch.Name);
            var tableRms = TableTextManager.GetOrCreate(fileName);

            tableRms.NewRow();
            tableRms.AddItem("Epoch", epoch.ReceiverTime);

            if (result is SingleSiteGnssResult || result is SingleSitePeriodInfoGnssResult)
            {
                if (result.ParamNames.Contains(ParamNames.Dx))
                {
                    XYZ       xyz       = new XYZ();
                    CovaedXyz covaedXyz = null;
                    if (result is SingleSiteGnssResult)
                    {
                        var singleSiteResult = result as SingleSiteGnssResult;
                        xyz       = singleSiteResult.ApproxXyz;
                        covaedXyz = singleSiteResult.CovaedEstXyz;
                    }
                    if (result is SingleSitePeriodInfoGnssResult)
                    {
                        var period = result as SingleSitePeriodInfoGnssResult;
                        xyz       = period.MaterialObj[0].SiteInfo.ApproxXyz;
                        covaedXyz = period.CovaedEstXyz;
                    }
                    var dxyz = ((BaseGnssResult)result).EstimatedXyzRms;// result.EstimatedXyzRms;// XYZ.Parse(result.Adjustment.Estimated);
                    if (dxyz != null && dxyz != XYZ.Zero)
                    {
                        // var tmsenu = CoordTransformer.LocaXyzToEnu(dxyz, xyz);
                        var cova   = ((BaseGnssResult)result).CovaOfFirstThree;
                        var tmsenu = CoordTransformer.XyzToEnuRms(cova, xyz);

                        tableRms.AddItem(Gnsser.ParamNames.De, Math.Abs(tmsenu.E));
                        tableRms.AddItem(Gnsser.ParamNames.Dn, Math.Abs(tmsenu.N));
                        tableRms.AddItem(Gnsser.ParamNames.Du, Math.Abs(tmsenu.U));
                    }
                }
            }

            if (result is IWithEstimatedBaseline)
            {
                var info     = result as IWithEstimatedBaseline;
                var baseLine = info.GetEstimatedBaseline();
                var xyz      = baseLine.EstimatedXyzOfRov;
                var dxyz     = ((BaseGnssResult)result).EstimatedXyzRms;

                //  var tmsenu = CoordTransformer.LocaXyzToEnu(dxyz, xyz);

                var cova   = ((BaseGnssResult)result).CovaOfFirstThree;
                var tmsenu = CoordTransformer.XyzToEnuRms(cova, xyz);


                tableRms.AddItem(Gnsser.ParamNames.De, Math.Abs(tmsenu.E));
                tableRms.AddItem(Gnsser.ParamNames.Dn, Math.Abs(tmsenu.N));
                tableRms.AddItem(Gnsser.ParamNames.Du, Math.Abs(tmsenu.U));
            }

            tableRms.AddItem(result.ResultMatrix.StdOfEstimatedParam);
            if (epoch.UnstablePrns.Count > 0 || epoch.RemovedPrns.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                if (epoch.UnstablePrns.Count > 0)
                {
                    sb.Append(String.Format(new EnumerableFormatProvider(), "{0}", epoch.UnstablePrns));
                }

                if (epoch.RemovedPrns.Count > 0)
                {
                    sb.Append(";" + String.Format(new EnumerableFormatProvider(), "{0}", epoch.RemovedPrns));
                }

                tableRms.AddItem("CsOrRemoved", sb.ToString());
            }

            tableRms.AddItem(ParamNames.ResultType, result.ResultMatrix.ResultType);
            tableRms.AddItem(ParamNames.StdDev, result.ResultMatrix.StdDev);
            tableRms.EndRow();
        }
コード例 #25
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 输出结果
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        public void AddEpochResult(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            //结果采样率过滤
            var interval = Math.Abs(epoch.ReceiverTime - PrevEpoch);

            if (interval < this.OutputMinInterval)
            {
                return;
            }
            PrevEpoch = epoch.ReceiverTime;

            //总开关
            if (!Option.IsOutputResult && !Option.IsOutputEpochResult)
            {
                return;
            }

            var Adjustment = result.ResultMatrix;
            var ParamNames = result.ParamNames;

            //各历元信息
            #region  默认逐历元输出

            //参数值
            if (Option.IsOutputEpochParam)
            {
                AddEpochParam(epoch, result);
            }

            // RMS
            if (Option.IsOutputEpochParamRms)
            {
                AddParamRms(epoch, result);
            }

            //钟跳
            if (Option.IsOutputJumpClockFile)
            {
                CheckOrAddClockJump(epoch, result);
            }

            //第二参数
            if (result.ResultMatrix.SecondEstimated != null)
            {
                AddSecondParam(epoch, result);
                AddSecondParamRms(epoch, result);
            }

            //DOP
            if (this.Option.IsOutputEpochDop)
            {
                AddDop(epoch, result);
            }

            //两路滤波,模糊度固定解
            AddAmbFixed(epoch, result);

            //动态定位,且坐标未固定,则添加
            if (this.Option.IsOutputEpochCoord || (this.Option.PositionType == PositionType.动态定位 && !this.Option.IsFixingCoord))
            {
                AddEpochCoord(epoch, result);
            }
            #endregion

            #region  择性历元输出
            #region 平差文件
            if (this.Option.IsOutputAdjust)
            {
                AioAdjustFileBuilder.AddAdjustment(Adjustment);
            }
            if (this.Option.IsOutputObsEquation)
            {
                AdjustEquationFileBuilder.AddAdjustment(Adjustment);
            }
            if (this.Option.IsOutputAdjustMatrix)
            {
                if (results == null)
                {
                    results = new List <SimpleGnssResult>();
                }
                results.Add(result);
            }

            #endregion

            #region 电离层产品
            if (this.Option.IsOutputIono)
            {
                BuildIonoResult(epoch, Adjustment, ParamNames);
            }

            #endregion

            #region 对流层产品
            if (this.Option.IsOutputWetTrop && Geo.Utils.StringUtil.Contanis(ParamNames, Gnsser.ParamNames.WetTropZpd, true) && epoch.ReceiverTime.SecondsOfDay % 300 == 0)
            {
                var table = TableTextManager.GetOrCreate(epoch.Name + "_" + Gnsser.ParamNames.WetTropZpd);
                table.NewRow();
                table.AddItem("Epoch", epoch.ReceiverTime);

                EpochInformation epochInfo = epoch as EpochInformation;
                //var ionoResult = Adjustment.Estimated.GetAll(Gnsser.ParamNames.WetTrop);
                //天顶对流层总延迟,epochInfo[0].WetMap_ZTD=1
                table.AddItem("Trop1", epochInfo[0].AppriorTropDelay + epochInfo[0].WetMap_ZTD * result.ResultMatrix.Estimated[4, 0]);
                table.AddItem("Trop2", epochInfo[1].WetMap_ZTD * result.ResultMatrix.Estimated[4, 0]);
                table.AddItem("Trop3", result.ResultMatrix.Estimated[4, 0]);
                //epoch[0].AppriorTropDelay + epoch[0].WetMap_ZTD *
                //foreach (var item in ionoResult)
                //{
                //    table.AddItem(item.Key, item.Value.Value);
                //}
            }
            #endregion

            #region  历元卫星观测信息
            if (Option.IsOutputEpochSatInfo)
            {
                AddSiteEpochSatInfo(epoch);
            }
            #endregion
            #endregion

            if (Option.IsOutputObservation)
            {
                AddObservation(epoch, result);
            }
            if (Option.IsOutputResidual)
            {
                this.AddResidual(epoch, result);
            }

            //轨道产品输出
            if (result is IOrbitResult)
            {
                var ephs = ((IOrbitResult)result).EphemerisResults;

                Sp3Section sp3Records = new Sp3Section(ephs.First.Original.Time);
                foreach (var eph in ephs)
                {
                    sp3Records.Add(eph.Original.Prn, eph.Corrected);
                }
                Sp3Writer.Write(sp3Records);
            }


            this.PrevResult = result;
        }
コード例 #26
0
ファイル: GnssResultBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 增加参数到存储表
        /// </summary>
        /// <param name="epoch"></param>
        /// <param name="result"></param>
        private void AddEpochParam(ISiteSatObsInfo epoch, SimpleGnssResult result)
        {
            var fileName = ResultFileNameBuilder.BuildEpochParamFileName(epoch.Name);



            var table = TableTextManager.GetOrCreate(fileName);

            table.NewRow();
            table.AddItem("Epoch", epoch.ReceiverTime);//ToShortTimeString());

            if (result is SingleSiteGnssResult ||
                result is IWithEstimatedBaselines ||
                result is SingleSitePeriodInfoGnssResult ||
                result is IWithEstimatedBaseline)
            {
                XYZ appXyz = new XYZ();
                XYZ estXyz = new XYZ();
                if (result is SingleSiteGnssResult)
                {
                    var singleSiteResult = result as SingleSiteGnssResult;
                    appXyz = singleSiteResult.ApproxXyz;
                    estXyz = singleSiteResult.EstimatedXyz;
                }
                if (result is SingleSitePeriodInfoGnssResult)
                {
                    var period = result as SingleSitePeriodInfoGnssResult;
                    appXyz = period.MaterialObj[0].SiteInfo.ApproxXyz;
                }
                if (result is IWithEstimatedBaseline)
                {
                    var info     = result as IWithEstimatedBaseline;
                    var baseLine = info.GetEstimatedBaseline();
                    estXyz = baseLine.EstimatedXyzOfRov;
                    appXyz = baseLine.ApproxXyzOfRov;
                }
                if (result is IWithEstimatedBaselines)
                {
                    var info     = result as IWithEstimatedBaselines;
                    var baseLine = info.GetEstimatedBaselines().First;
                    estXyz = baseLine.EstimatedXyzOfRov;
                    appXyz = baseLine.ApproxXyzOfRov;
                }


                var dxyz = ((BaseGnssResult)result).XyzCorrection; // XYZ.Parse(result.Adjustment.Estimated);

                if (dxyz != null)                                  //&& epoch.ReceiverTime.SecondsOfDay % 30 == 0
                {
                    ENU enu = null;
                    if (this.Option.IsUpdateEstimatePostition)
                    {
                        dxyz = estXyz - appXyz;

                        enu = CoordTransformer.XyzToEnu(estXyz, appXyz);
                    }
                    else
                    {
                        enu = CoordTransformer.LocaXyzToEnu(dxyz, appXyz);
                    }

                    table.AddItem(Gnsser.ParamNames.De, enu.E);
                    table.AddItem(Gnsser.ParamNames.Dn, enu.N);
                    table.AddItem(Gnsser.ParamNames.Du, enu.U);

                    if (this.Option.IsUpdateEstimatePostition || this.Option.PositionType == PositionType.动态定位)
                    {
                        table.AddItem("EstX", estXyz.X);
                        table.AddItem("EstY", estXyz.Y);
                        table.AddItem("EstZ", estXyz.Z);
                    }
                }
            }

            #region 添加钟结果改正
            if (result is ClockEstimationResult)
            {
                var           mEpochInfo = epoch as MultiSiteEpochInfo;
                List <string> paranames  = result.ResultMatrix.ParamNames;
                int           CountOfSat = epoch.EnabledSatCount * 2;
                foreach (var item in epoch.EnabledPrns)
                {
                    double qq = result.ResultMatrix.Corrected.CorrectedValue[paranames.IndexOf(item + "_" + ParamNames.SatClkErrDistance)];
                    table.AddItem(item.ToString(), qq);
                    int    count = 0;
                    double time  = 0;
                    Time   EmissionSatClockTime = new Time();// Time.Default;
                    //Time EmissionSatClockTime1 = Time.Default;
                    foreach (var item2 in mEpochInfo)
                    {
                        foreach (var item3 in item2)
                        {
                            if (item3.Prn == item)
                            {
                                count++;
                                time += item3.Ephemeris.ClockBias - ((Ephemeris)item3.Ephemeris).RelativeCorrection;
                                //EmissionSatClockTime.TickTime.SecondTicks += item3.EmissionTime.TickTime.SecondTicks;

                                EmissionSatClockTime.TickTime += item3.EmissionTime.TickTime;
                                break;
                            }
                        }
                    }
                    double aa    = qq / 0.3 + time * 1e9 / count;
                    double time1 = (EmissionSatClockTime.TickTime.SecondTicks + EmissionSatClockTime.TickTime.Fraction) / count;
                    EmissionSatClockTime.TickTime = SecondTime.FromSecond(time1);
                    table.AddItem(item + "EmissionSatClockTime", EmissionSatClockTime.ToString());
                    table.AddItem(item + "_Corrected", aa);
                }
            }
            #endregion

            //table.AddItem((IVector)result.Adjustment.Estimated);
            foreach (var name in result.ParamNames)
            {
                //if (item.Length == 6 && item.Substring(3, 3) == "_λN")
                //{
                //    table.AddItem(item.Substring(0, 3), result.Adjustment.Estimated[item]);
                //}
                //else
                {
                    table.AddItem(name, result.ResultMatrix.Estimated[name]);
                }
            }
            if (epoch.UnstablePrns.Count > 0 || epoch.RemovedPrns.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                if (epoch.UnstablePrns.Count > 0)
                {
                    sb.Append(String.Format(new EnumerableFormatProvider(), "{0}", epoch.UnstablePrns));
                }

                if (epoch.RemovedPrns.Count > 0)
                {
                    sb.Append(";" + String.Format(new EnumerableFormatProvider(), "{0}", epoch.RemovedPrns));
                }

                table.AddItem("CsOrRemoved", sb.ToString());
            }

            table.AddItem(ParamNames.ResultType, result.ResultMatrix.ResultType);
            table.AddItem(ParamNames.StdDev, result.ResultMatrix.StdDev);

            table.EndRow();
        }
コード例 #27
0
ファイル: HtmlReportBuilder.cs プロジェクト: yxw027/GNSSer
        /// <summary>
        /// 多站结果
        /// </summary>
        /// <param name="mainSb"></param>
        /// <param name="firstObject"></param>
        private void BuildGeneraInfoTableOfMultiSites(StringBuilder mainSb, SimpleGnssResult firstObject)
        {
            var last = Results.Last();
            var sb   = new StringBuilder();

            sb.Append(BuildTableHeaderCell("Num"));
            sb.Append(BuildTableHeaderCell("Name"));
            sb.Append(BuildTableHeaderCell("StdDev"));
            sb.Append(BuildTableHeaderCell(ParamNames.ResultType));

            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;
                var baselineObj = firstObject as IWithEstimatedBaselines;
                var baselines   = baselineObj.GetEstimatedBaselines();
                foreach (var baseline in baselines)
                {
                    sb = new StringBuilder();;

                    sb.Append(BuildTableCell(i));
                    sb.Append(BuildTableCell(baseline.Name));
                    sb.Append(BuildTableCell(firstObject.ResultMatrix.StdDev.ToString(format)));
                    sb.Append(BuildTableCell(firstObject.ResultMatrix.ResultType.ToString()));
                    var EstimatedXyz = baseline.EstimatedRmsXyzOfRov.Value;
                    sb.Append(BuildTableCell(EstimatedXyz.X.ToString("0.#####")));
                    sb.Append(BuildTableCell(EstimatedXyz.Y.ToString("0.#####")));
                    sb.Append(BuildTableCell(EstimatedXyz.Z.ToString("0.#####")));

                    var geoCoord = baseline.EstimatedGeoCoordOfRov;
                    sb.Append(BuildTableCell(new DMS(geoCoord.Lon).ToReadableDms()));
                    sb.Append(BuildTableCell(new DMS(geoCoord.Lat).ToReadableDms()));
                    sb.Append(BuildTableCell(geoCoord.Height.ToString("0.#####")));

                    var tmsenu = CoordTransformer.LocaXyzToEnu(baseline.EstimatedRmsXyzOfRov.Rms, baseline.ApproxXyzOfRov);
                    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 firstObject.ParamAccuracyInfos.KeyValues)
                        {
                            var val  = kv.Value.RmsValue.Value;
                            var isOk = firstObject.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(firstObject.ReceiverTime));

                    var rowContent = BuildTableRow(sb.ToString());
                    mainSb.Append(rowContent);
                    mainSb.AppendLine();
                    i++;
                }
            }
        }