Exemplo n.º 1
0
        /// <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));
        }
Exemplo n.º 2
0
        /// <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);
        }
Exemplo n.º 3
0
        /// <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));
        }