Пример #1
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="DataSourceContext"></param>
        /// <param name="GnssOption"></param>
        public EpochDouFreDoubleDifferPositioner(DataSourceContext DataSourceContext, GnssProcessOption GnssOption)
            : base(DataSourceContext, GnssOption)
        {
            //双差模糊度固定
            this.DoubleIonFreeAmReslution  = new DoubleIonFreeAmbiguityReslution();
            this.ResidualsAnalysis         = new ResidualsAnalysis();
            this.DualBandCycleSlipDetector = new DualBandCycleSlipDetector();
            this.Name = "单历元双频相位双差";


            double BaselineLength = (this.DataSourceContext.ObservationDataSources.BaseDataSource.SiteInfo.ApproxXyz
                                     - this.DataSourceContext.ObservationDataSources.OtherDataSource.SiteInfo.ApproxXyz).Length;

            //默认双差基础参数为5个(3个坐标坐标+基准站的对流层参数+流动站的对流层参数)
            this.BaseParamCount = 5;
            if (BaselineLength <= 8000)
            {
                this.BaseParamCount = 3;
            }
            else if (BaselineLength <= 8000 && BaselineLength > 800)
            {
                this.BaseParamCount = 4;
            }


            this.IsBaseSatelliteRequried = true;//强制启用基准星
            this.MatrixBuilder           = new EpochDouFreDoubleDifferMatrixBuilder(Option, this.BaseParamCount);
            AmbiguityManager             = new AmbiguityManager(Option);
        }
Пример #2
0
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="context"></param>
        /// <param name="option"></param>
        public AbstractGnssSolver(DataSourceContext context, GnssProcessOption option) : base(context, option)
        {
            this.Name = context.ObservationDataSource == null ? "GNSS计算器" : context.ObservationDataSource.Name;
            //为所有测站附加天线信息,为了保险起见多赋值一次。
            if (context.AntennaDataSource != null)
            {
                foreach (var item in context.ObservationDataSources.DataSources)
                {
                    item.SiteInfo.Antenna = context.AntennaDataSource.Get(item.SiteInfo.AntennaType);
                }
            }

            //是否需要伪距预先定位
            if (Option.IsNeedPseudorangePositionWhenProcess && !(this is SimpleRangePositioner))
            {
                int interval          = (int)this.DataSourceContext.ObservationDataSource.ObsInfo.Interval;
                GnssProcessOption opt = GnssProcessOption.GetPsuedoRangeOption(interval, option.IsSmoothRangeWhenPrevPseudorangePosition);

                RangePositioner = new SimpleRangePositioner(DataSourceContext, opt);
            }

            this.IsUpdateEstimatePostition = option.IsUpdateEstimatePostition;
            this.EpochEphemerisSetter      = new EpochEphemerisSetter(DataSourceContext, option);

            //模糊度
            IsOutputAmbiguity = true;
            AmbiguityManager  = new AmbiguityManager(base.Option);
            IonoFreeAmbiguitySolverManager = new IonoFreeAmbiguitySolverManager();
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="option"></param>
        /// <param name="BaseParamCount">基础参数数量</param>
        public AmbiFixedEpochDoublePhaseOnlytDifferMatrixBuilder(GnssProcessOption option, int BaseParamCount)
            : base(option)
        {
            this.BaseParamCount   = BaseParamCount;//
            this.ParamNameBuilder = new AmbiFixedEpochDoublePhaseOnlytDifferParamNameBuilder(this.Option, BaseParamCount);


            AmbiguityManager = new AmbiguityManager(Option);
        }