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); }
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); } }
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); } }