/// <summary> /// 预处理 /// </summary> /// <param name="epoch"></param> public override void PreProcess(EpochInformation epoch) { epoch.RemoveIonoFreeUnavailable(); //预处理 var tobeDeletes = new List <SatelliteNumber>(); foreach (var sat in epoch) { if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType)) { tobeDeletes.Add(sat.Prn); } } epoch.Remove(tobeDeletes); tobeDeletes.Clear(); foreach (var sat in epoch) { if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType)) { continue; } var prn = sat.Prn; var eph = EphemerisService.Get(sat.Prn, sat.ReceiverTime); if (eph == null) { tobeDeletes.Add(sat.Prn); continue; } sat.Ephemeris = eph; if (sat.GeoElevation < AngleCut) { tobeDeletes.Add(sat.Prn); continue; } //C1 改为 P1 DcbRangeCorrector.Correct(sat); //周跳探测 //sat.IsUnstable = Detector.Detect(sat); } epoch.Remove(tobeDeletes); tobeDeletes.Clear(); }
/// <summary> /// 处理一个 /// </summary> /// <param name="epoch"></param> public void Process(EpochInformation epoch) { Time time = epoch.ReceiverTime; //计算 foreach (var sat in epoch) { if (!IsValid(sat) || !SatelliteTypes.Contains(sat.Prn.SatelliteType) || sat.Ephemeris == null) { continue; } var prn = sat.Prn; double mwValue = sat.Combinations.MwPhaseCombinationValue; var weight = 1.0; if (sat.Polar.Elevation < 30) { weight = 2 * Math.Sin(sat.GeoElevation * Geo.Coordinates.AngularConvert.DegToRadMultiplier); } var windowData = WindowDataManager.GetOrCreate(prn); //弧段断裂,求值 if (sat.IsUnstable || windowData.IsKeyBreaked(time)) { CheckBuildPeriodResultAndClear(windowData, prn); } windowData.Add(time, new WeightedNumeral(mwValue, weight)); } //每一历元结束,都做一次判断,确保数据完全输出 foreach (var item in WindowDataManager.Data) { var prn = item.Key; var windowData = WindowDataManager.GetOrCreate(prn); //弧段断裂,求值 if (windowData.IsKeyBreaked(time)) { CheckBuildPeriodResultAndClear(windowData, prn); } } }