示例#1
0
 public async Task <double> GetArchiveValueAsync(DateTime begin, DateTime end,
                                                 SimplifyType simplifyType = SimplifyType.None)
 {
     using (var context = Archive.GetDbContext())
     {
         return(await((IDatabaseInterop)context).GetArchiveValueAsync(Id, begin, end, simplifyType));
     }
 }
示例#2
0
        public static Polyline Simplify(Polyline polyline, SimplifyType simplifyType,
                                        bool forceSimplify = false)
        {
            if (polyline == null)
            {
                return(null);
            }

            return(Engine.SimplifyPolyline(polyline, simplifyType, forceSimplify));
        }
示例#3
0
        public async Task <double> GetArchiveValueAsync(string name, DateTime begin, DateTime end,
                                                        SimplifyType simplifyType = SimplifyType.None)
        {
            var fromDtBinary = begin.ToBinary();
            var toDtBinary   = end.ToBinary();

            var itemid = await GetItemid(name);

            masterscadadataraw last;

            masterscadadataraw first;

            switch (simplifyType)
            {
            case SimplifyType.None:
                break;

            case SimplifyType.Increment:
                first = await(from r in masterscadadataraw
                              where r.itemid == itemid && r.quality == 192 && r.layer == 1 && r.Time >= fromDtBinary
                              orderby r.Time
                              select r).FirstOrDefaultAsync();

                last = await(from r in masterscadadataraw
                             where r.itemid == itemid && r.quality == 192 && r.layer == 1 && r.Time <= toDtBinary
                             orderby r.Time
                             select r).LastOrDefaultAsync();

                if (first?.value == null || last?.value == null)
                {
                    return(0);
                }

                return((double)last.value - (double)first.value);

            case SimplifyType.Average:
                break;

            case SimplifyType.Max:
                break;

            case SimplifyType.Min:
                break;

            case SimplifyType.Last:
                last = await(from r in masterscadadataraw
                             where r.itemid == itemid && r.quality == 192 && r.layer == 1 && r.Time <= toDtBinary
                             orderby r.Time
                             select r).LastOrDefaultAsync();

                if (last?.value == null)
                {
                    return(0);
                }

                return((double)last.value);

            case SimplifyType.First:
                first = await(from r in masterscadadataraw
                              where r.itemid == itemid && r.quality == 192 && r.layer == 1 && r.Time >= fromDtBinary
                              orderby r.Time
                              select r).FirstOrDefaultAsync();

                if (first?.value == null)
                {
                    return(0);
                }

                return((double)first.value);

            default:
                throw new ArgumentOutOfRangeException(nameof(simplifyType), simplifyType, null);
            }

            throw new NotImplementedException($"{nameof(GetArchiveValueAsync)} - {simplifyType}");
        }
示例#4
0
        public static TimeSeries Simplify(this TimeSeries ts, SimplifyType simplifyType, int seconds)
        {
            if (simplifyType == SimplifyType.None)
            {
                return(ts);
            }
            if (ts.Count == 0)
            {
                return(ts);
            }

            var dict = GetDateTimeRange(ts.TimeBegin, ts.TimeEnd, seconds);

            var j       = 1;
            var endTime = dict.ElementAt(j).Key;

            foreach (var timeValue in ts.TimeValues)
            {
                while (timeValue.Key >= endTime)
                {
                    endTime = dict.ElementAt(++j).Key;
                }
                dict.ElementAt(j - 1).Value.Add(timeValue.Value);
            }

            var newTs = new TimeSeries();

            switch (simplifyType)
            {
            case SimplifyType.None:
                newTs = ts;
                break;

            case SimplifyType.Increment:
                // начальные значения
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.FirstOrDefault());
                }

                for (var i = 1; i < newTs.Count; i++)
                {
                    if (newTs[i] == null)
                    {
                        newTs[i - 1] = null;
                    }
                    else if (newTs[i - 1] != null)
                    {
                        newTs[i - 1] = newTs[i] - newTs[i - 1];
                    }
                }
                newTs.RemoveLast();

                break;

            case SimplifyType.Average:
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.Average());
                }
                newTs.RemoveLast();

                break;

            case SimplifyType.Max:
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.Max());
                }
                newTs.RemoveLast();
                break;

            case SimplifyType.Min:
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.Min());
                }
                newTs.RemoveLast();
                break;

            case SimplifyType.Last:
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.LastOrDefault());
                }
                newTs.RemoveLast();
                break;

            case SimplifyType.First:
                foreach (var d in dict)
                {
                    newTs.Add(d.Key, d.Value.FirstOrDefault());
                }
                newTs.RemoveLast();
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(simplifyType), simplifyType, null);
            }

            return(newTs);
        }
示例#5
0
 public Task <double> GetArchiveValueAsync(DateTime begin, DateTime end,
                                           SimplifyType simplifyType = SimplifyType.None)
 {
     throw new NotImplementedException();
 }