/// <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())); }