Beispiel #1
0
 /// <summary>
 /// 生成卫星编号相关的参数名称
 /// </summary>
 /// <param name="prn"></param>
 /// <returns></returns>
 public override string GetParamName(SatelliteNumber prn)
 {
     if (IsSiteNameIncluded)
     {
         var material = this.Material as MultiSiteEpochInfo;
         NetDoubleDifferName namer = new NetDoubleDifferName(material.RovSiteNames[0], material.BaseSiteName, prn, BasePrn);
         return(namer.ToString() + Gnsser.ParamNames.DoubleDifferAmbiguitySuffix);
     }
     return(prn.ToString() + "-" + BasePrn + Gnsser.ParamNames.DoubleDifferAmbiguitySuffix);
     //return prn.ToString() + "-" + BasePrn + Gnsser.ParamNames.PhaseLengthSuffix;
 }
        /// <summary>
        /// 获取MW双差值,名称与双差值匹配。
        /// </summary>
        /// <param name="sites"></param>
        /// <param name="basePrn"></param>
        /// <param name="isNetSolver">是否为网解</param>
        /// <returns></returns>
        public NameRmsedNumeralVector GetMwCycleDoubleDifferValue(MultiSiteEpochInfo sites, SatelliteNumber basePrn, bool isNetSolver = true)
        {
            //计算所有测站星间单差
            var satDiffersOfSites = new Dictionary <string, NameRmsedNumeralVector <SatelliteNumber> >();
            var time = sites.ReceiverTime;

            foreach (var rovSiteObj in sites)
            {
                var rovSite = this.Get(rovSiteObj.SiteName);
                satDiffersOfSites[rovSiteObj.SiteName] = rovSite.GetDifferMwCycle(time, basePrn);
            }

            //计算站间单差,即双差
            NameRmsedNumeralVector result = new NameRmsedNumeralVector();
            var refSite = satDiffersOfSites[sites.BaseSiteName];

            foreach (var kv in satDiffersOfSites)
            {
                if (kv.Key == sites.BaseSiteName)
                {
                    continue;
                }

                var differ = kv.Value - refSite;

                foreach (var diffItem in differ)
                {
                    NetDoubleDifferName differName = new NetDoubleDifferName()
                    {
                        RefPrn = basePrn,
                        RovPrn = diffItem.Key
                    };
                    if (isNetSolver)//网解带坐标
                    {
                        differName.RefName = sites.BaseSiteName;
                        differName.RovName = kv.Key;
                    }
                    var name = differName.ToString(Gnsser.ParamNames.DoubleDifferAmbiguitySuffix);
                    result[name] = diffItem.Value;
                }
            }
            return(result);
        }
        private NameRmsedNumeralVector GetIntMwDoubleDiffers(ParamValueService paramValueService, GroupedValueService wmValues)
        {
            NameRmsedNumeralVector wideLaneVector = new NameRmsedNumeralVector();
            // RmsedVector wideLaneVector = new RmsedVector();

            var paramNames = paramValueService.ParamNames;

            foreach (var item in paramNames)
            {
                if (!NetDoubleDifferName.IsDifferParam(item))
                {
                    continue;
                }
                var paramName = NetDoubleDifferName.Parse(item);
                CurrentBasePrn = paramName.RefPrn;

                if (!paramName.IsValid)
                {
                    continue;
                }
                var floatWideAmbi = wmValues.GetFirstDoubleDiffer(paramName);
                if (floatWideAmbi == null)
                {
                    continue;
                }

                var wideAmbi = new RmsedNumeral(Math.Round(floatWideAmbi.Value), 1e-10);
                var differ   = (floatWideAmbi.Value - wideAmbi.Value);
                if (Math.Abs(differ) > 0.3)
                {
                    log.Info(item + " 宽项(MW)整数偏差为 " + differ + "取消固定。");
                    continue;
                }

                wideLaneVector[item] = wideAmbi;
            }

            return(wideLaneVector);
        }
        /// <summary>
        /// 获取失败的卫星,具有周跳的,已经进行了降权,因此不返回。
        /// </summary>
        /// <returns></returns>
        public List <SatelliteNumber> GetBadPrns(BaseGnssResult product)
        {
            List <SatelliteNumber> badPrns = new List <SatelliteNumber>();
            var csedPrns = product.Material.UnstablePrns;//忽略周跳卫星的检查


            var postResiduals = product.ResultMatrix.PostfitResidual;

            if (product is NetDoubleDifferPositionResult || product is DualSiteEpochDoubleDifferResult)
            {
                postResiduals = postResiduals.FilterContains(ParamNames.DoubleDiffer + ParamNames.PhaseL);

                var collection = GetBadElementResidual(postResiduals);

                foreach (var item in collection)
                {
                    var name = NetDoubleDifferName.Parse(item);
                    AddToBadPrns(badPrns, csedPrns, name.RovPrn);
                }
            }
            else if (product.Material is EpochInformation)
            {
                var collection = GetBadElementResidual(postResiduals);
                foreach (var item in collection)
                {
                    SatelliteNumber prn = SatelliteNumber.Parse(item);
                    if (prn.PRN == 0)
                    {
                        continue;
                    }

                    AddToBadPrns(badPrns, csedPrns, prn);
                }
            }


            return(badPrns);
        }
 /// <summary>
 /// 双差
 /// </summary>
 /// <param name="paramName"></param>
 /// <returns></returns>
 public RmsedNumeral GetFirstDoubleDiffer(NetDoubleDifferName paramName)
 {
     return(GetFirstDoubleDiffer(paramName.RovName, paramName.RefName, paramName.RovPrn.ToString(), paramName.RefPrn.ToString()));
 }