Example #1
0
        /// <summary>
        /// 创建单点定位
        /// </summary>
        /// <param name="obsPath">测站信息</param>
        /// <param name="startTime">起始计算时间</param>
        /// <returns></returns>
        private IonFreeDoubleDifferPositioner BuildPositioner(string obsPath, RinexFileObsDataSource refStationPath, BufferedTimePeriod startTime)
        {
            GnssProcessOption PositionOption = GetModel(startTime);

            #region 星历钟差数据源配置
            #region 星历数据配置
            FileEphemerisService ephemerisDataSource = null;
            if (IsSetEphemerisFile)
            {
                string ephemerisPath = this.textBox_navPath.Text;
                if (!File.Exists(ephemerisPath))
                {
                    throw new FileNotFoundException("指定星历文件不存在!\r\n" + ephemerisPath);
                }
                FileEphemerisType ephType = EphemerisDataSourceFactory.GetFileEphemerisTypeFromPath(ephemerisPath);
                ephemerisDataSource = EphemerisDataSourceFactory.Create(ephemerisPath);
            }
            #endregion
            #region 钟差数据配置
            Data.ISimpleClockService clock = null;
            if (this.checkBox_enableClockFile.Checked)
            {
                clock = new Data.SimpleClockService(this.textBox_ClockPath.Text);
            }
            #endregion
            #endregion

            #region 定位器构造


            //加载文件数据
            RinexFileObsDataSource refObservationDataSource = (refStationPath);

            var rovObservationDataSource = new RinexFileObsDataSource(obsPath);

            DataSourceContext             context = DataSourceContext.LoadDefault(PositionOption, rovObservationDataSource, ephemerisDataSource, clock);
            IonFreeDoubleDifferPositioner pp      = new IonFreeDoubleDifferPositioner(context, PositionOption);

            //pp.Produced += pp_ProgressIncreased;
            return(pp);

            #endregion
        }
Example #2
0
        /// <summary>
        /// 生成GNSS计算器
        /// </summary>
        /// <param name="type"></param>
        /// <param name="DataSourceContext"></param>
        /// <param name="GnssOption"></param>
        /// <returns></returns>
        public static IGnssSolver Create(DataSourceContext DataSourceContext, GnssProcessOption GnssOption)
        {
            IGnssSolver Solver = null;
            SimpleBaseGnssMatrixBuilder matrix = null;

            switch (GnssOption.GnssSolverType)
            {
            case GnssSolverType.双差网解定位:
                Solver = new NetDoubleDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.网解双差定位:
                Solver = new NetDoubleDifferPositionSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.递归网解双差定位:
                Solver = new RecursiveNetDoubleDifferPositionSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.网解单差定位:
                Solver = new NetSingleDifferPositionSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.钟差网解:
                Solver = new IonoFreeClockEstimationer(DataSourceContext, GnssOption);
                GnssOption.IsBaseSatelliteRequried = false;
                GnssOption.IsRequireSameSats       = false;
                break;

            case GnssSolverType.无电离层双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new IonFreeDoubleDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多历元载波单差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new SingleDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单历元载波双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new EpochDoublePhaseDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单历元双频双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new EpochDualFreqDoubleDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单历元单频双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new EpochDoubleDifferPositioner(DataSourceContext, GnssOption);
                break;

            //case GnssSolverType.单历元载波双差:
            //    GnssOption.IsBaseSatelliteRequried = true;
            //    Solver = new EpochDoublePhaseDifferPositioner(DataSourceContext, GnssOption);
            //    break;
            case GnssSolverType.模糊度固定的单历元纯载波双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new AmbiFixedEpochDoublePhaseOnlytDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单历元双频载波双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new EpochDouFreDoubleDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多历元载波无相关单差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new Gnsser.Service.SingleDifferNoRelevantPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多历元载波双差:
                GnssOption.IsBaseSatelliteRequried = true;
                Solver = new Gnsser.Service.PeriodDoublePhaseDifferPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.最简伪距定位:
                Solver = new SimpleRangePositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多频伪距定位:
                Solver = new MultiFreqRangePositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.递归无电离层组合PPP:
                Solver = new RecursiveIonoFreePpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.动态伪距定位:
                Solver = new DynamicRangePositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多系统伪距定位:
                Solver = new MultiSysRangePositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.参数化对流层伪距定位:
                Solver = new RangePositionWithTropParamSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.无电离层组合PPP:
                Solver = new IonoFreePpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.对流层增强无电离层PPP:
                Solver = new TropAugIonoFreePpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.电离层模型化单频PPP:
                Solver = new IonoModeledSingleFreqPpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.固定参考站PPP:
                Solver = new SiteFixedIonoFreePpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.非差非组合PPP:
                Solver = new UncombinedPpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单频PPP:
                Solver = new SingleFreqPpp(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单频半和PPP:
                Solver = new HalfSumSingeFreqSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.通用单站单频计算:
                Solver = new CommonSingeFreqGnssSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.双频电离层改正单频PPP:
                Solver = new DoubleFreqIonoSingleFreqPppSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单频消电离层组合:
                Solver = new SingleFreqIonoFreePppSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单站多历元消电离层PPP:
                Solver = new SingleSitePeriodIonoFreePppSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.电离层硬件延迟计算:
                matrix = new IonoHardwareDelaySolveMatrixBuilder(GnssOption);
                Solver = new CommonSingeSatGnssSolver(DataSourceContext, GnssOption, (SingleSiteSingleSatGnssMatrixBuilder)matrix);
                break;

            case GnssSolverType.电离层延迟变化计算:
                matrix = new IonoDeltaSolveMatrixBuilder(GnssOption);
                Solver = new CommonSingePeriodSatGnssSolver(DataSourceContext, GnssOption, (SingleSiteSinglePeriodSatGnssMatrixBuilder)matrix);
                break;

            case GnssSolverType.单站单历元扩展计算:
                Solver = new SingeSiteGnssExtentSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单站多历元扩展计算:
                Solver = new SingleSitePeriodGnssExtentSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.单频多历元电离层参数化定位:
                Solver = new SingleSitePeriodParamedIonoSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.非差定轨:
                Solver = new ZeroDifferOrbitSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.简易伪距定轨:
                Solver = new RangeOrbitSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.双差定轨:
                Solver = new DoubleDifferOrbitSolver(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多站单历元扩展计算:
                Solver = new MultiSiteGnssExtentPositioner(DataSourceContext, GnssOption);
                break;

            case GnssSolverType.多站多历元扩展计算:
                Solver = new PeriodMultiSiteGnssExtentSolver(DataSourceContext, GnssOption);
                break;

            default:
                Solver = new IonoFreePpp(DataSourceContext, GnssOption);
                break;
            }
            return(Solver);
        }