/// <summary> /// 计算 /// </summary> /// <param name="geoCoord"></param> /// <param name="Time"></param> /// <returns></returns> public DopValue Calculate(GeoCoord geoCoord, Time Time) { // var prns = this.EphemerisService.Prns.FindAll(m=>this.SatelliteTypes.Contains(m.SatelliteType)); this.Time = Time; List <Ephemeris> ephs = new List <Ephemeris>(); foreach (var prn in Prns) { if (SatWeights != null && !SatWeights.Contains(prn)) { continue; } ephs.Add(this.EphemerisService.Get(prn, Time)); } var sats = EphemerisUtil.GetSatsInVisible(geoCoord, ephs, CutOffAngle); var xyz = CoordTransformer.GeoCoordToXyz(geoCoord); if (sats.Count == 0) { return(null); } if (sats.Count < 4) { return(new DopValue() { StationXYZ = xyz, Time = sats[0].Time, SatCount = sats.Count }); } return(GetDopValue(xyz, sats)); }
/// <summary> /// 权阵获取,如果无提供器,则采用默认 1. /// </summary> /// <param name="sats"></param> /// <returns></returns> private Matrix BiuldWeight(List <Ephemeris> sats) { Matrix P = new Matrix(sats.Count); int i = 0; foreach (var eph in sats) { double p = 1; if (SatWeights != null) { var val = SatWeights.Get(eph.Time, eph.Prn); if (Geo.Utils.DoubleUtil.IsValid(val)) { p = val; } } P[i, i] = p; i++; } return(P); }
/// <summary> /// 计算 /// </summary> /// <param name="xyz"></param> /// <param name="Time"></param> /// <returns></returns> public DopValue Calculate(XYZ xyz, Time Time) { // var prns = this.EphemerisService.Prns.FindAll(m=>this.SatelliteTypes.Contains(m.SatelliteType)); this.Time = Time; List <Ephemeris> ephs = new List <Ephemeris>(); foreach (var prn in Prns) { if (SatWeights != null && !SatWeights.Contains(prn)) { continue; } ephs.Add(this.EphemerisService.Get(prn, Time)); } var sats = EphemerisUtil.GetSatsInVisible(xyz, ephs, CutOffAngle); if (sats.Count < 4) { return(null); } return(GetDopValue(xyz, sats)); }