/// <summary>
        /// 执行选星
        /// </summary>
        /// <returns></returns>
        public override SatelliteNumber Select()
        {
            var       start   = TimePeriod.Start;
            var       end     = TimePeriod.End;
            TableCell maxCell = null;

            if (EnableCenterMaxSelection)
            {
                var windowSpan = Math.Min(CenterCount, TimePeriod.Span);
                var middle     = Time.Parse(start + TimeSpan.FromSeconds(TimePeriod.Span / 2.0));

                maxCell = SatEleTable.GetMax(middle, CenterCount);
                return(SatelliteNumber.Parse(maxCell.ColName));

                //start = middle - TimeSpan.FromSeconds(windowSpan / 2.0);
                //end = middle + TimeSpan.FromSeconds(windowSpan / 2.0);
            }


            maxCell = SatEleTable.GetMax(start, end);
            return(SatelliteNumber.Parse(maxCell.ColName));
        }
Beispiel #2
0
        /// <summary>
        /// 执行选星
        /// </summary>
        /// <returns></returns>
        public override SatelliteNumber Select()
        {
            var start    = TimePeriod.Start;
            var end      = TimePeriod.End;
            var subTable = SatEleTable.GetSub(start, end);
            var dic      = subTable.GetValidDataCount(m => m >= CutOffAngle);

            var max = dic.Where(m => m.Value == dic.Max(n => n.Value)).ToList();

            var    maxItem  = max.First();
            double maxValue = double.MinValue;

            foreach (var item in max)
            {
                var thisVal = subTable.GetMaxValue(item.Key, start, end);
                if (maxValue < thisVal)
                {
                    maxValue = thisVal;
                    maxItem  = item;
                }
            }

            return(SatelliteNumber.Parse(maxItem.Key));
        }