Beispiel #1
0
        public List <Coordinate> KMeansG(int id)
        {
            List <Coordinate> CoorL = new List <Coordinate>();
            List <Report>     list  = new List <Report>();
            int mone = 0;
            int n    = 0;

            foreach (var v in GetAllReport().ToArray())
            {
                if (v.FallId == id)
                {
                    list.Add(v);
                    mone += v.BoomsN;
                    n++;
                }
            }
            if (n == 0)
            {
                n++;
            }
            KMeans km = new KMeans(list, mone / n);

            foreach (var l in km.K_Means())
            {
                CoorL.Add(new Coordinate(l.Latitude, l.Longitude));
            }
            return(CoorL);
        }
Beispiel #2
0
        private async void UpdateExplosions(Report newReport)
        {
            Event _event     = newReport.Event;
            var   explotions = await _dal.GetExplosions(e => e.Event.Id == _event.Id);

            //chsck if have real location
            if (explotions.Count > 0 && explotions.All(e => e.RealLatitude > 0))
            {
                return;
            }

            //remove the last approximate explosions
            foreach (var explotion in explotions.ToArray())
            {
                _dal.RemoveExplosion(explotion.Id);
            }
            _event.Reports = await _dal.GetReportsAsync((report => report.Event.Id == _event.Id));

            _event.Reports.Add(newReport);
            int    averageExplosions      = (int)_event.Reports.Average(r => r.NumOfExplosions);
            KMeans kMeans                 = new KMeans(_event.Reports, averageExplosions);
            List <GeoCoordinate> clusters = kMeans.K_Means();

            foreach (GeoCoordinate g in clusters)
            {
                Explosion e = new Explosion
                {
                    ApproxLatitude  = g.Latitude,
                    ApproxLongitude = g.Longitude,
                    Event           = _event
                };
                await _dal.AddExplosion(e);
            }
        }
Beispiel #3
0
        private async void UpdateHits(Report newReport)
        {
            Event _event = newReport.Event;
            var   hits   = _event.Hits;

            // var hits = await _dal.GetHits(h => h.Event.Id == _event.Id);

            //chsck if have real location

            /* if (hits.Count > 0 && hits.All(h => h.RealLatitude > 0))
             * {
             *   _event.Reports.Add(newReport);
             *   return;
             * }*/
            //remove the last approximate hits
            foreach (var explotion in hits.ToArray())
            {
                _dal.RemoveHit(explotion.Id);
            }
            //_event.Reports = await _dal.GetReportsAsync((report => report.Event.Id == _event.Id));
            _event.Reports.Add(newReport);
            int    averageHits            = (int)_event.Reports.Average(r => r.NumOfHits);
            KMeans kMeans                 = new KMeans(_event.Reports, averageHits);
            List <GeoCoordinate> clusters = kMeans.K_Means();

            foreach (GeoCoordinate g in clusters)
            {
                Hit h = new Hit
                {
                    ApproxLatitude  = g.Latitude,
                    ApproxLongitude = g.Longitude,
                    Event           = _event
                };
                await _dal.AddHitAsync(h);
            }
        }