private void ProcessOldClusterLocations(string token, Location location, string firebaseToken) { int risk = 0; var oldClusters = _clusterService.OldClustersInRange(location, -1); if (oldClusters != null) { if (oldClusters.Count > 0) { risk = RISK.LOW_RISK; oldClusters.ForEach(cluster => { var coordinates = cluster.Coordinates; for (int i = 0; i < coordinates.Count; i++) { if (Cluster.HaversineDistance(location, coordinates.ElementAt(i)) <= ProximityToCarrier) { _databaseEngine.Increment_Incidents(location.AccessToken); risk = RISK.MODERATE_RISK; } } }); RiskDetected(token, firebaseToken, location, risk); } else { ProcessOldUnclusteredLocations(token, location, firebaseToken); } } else { ProcessOldUnclusteredLocations(token, location, firebaseToken); } }
public ItineraryRiskWrapper ProcessItinerary(Itinerary userItinerary, string access_token) { double averageClusterDensity = 0; ItineraryRisk itinerary = new ItineraryRisk(userItinerary.Created, access_token); if (userItinerary.Locations != null) { if (itinerary.LocationItineraryRisks == null) { itinerary.LocationItineraryRisks = new Dictionary <Location, int>(); } List <Location> locationList = userItinerary.Locations; locationList.ForEach(location => { var clusters = ClusterService.ClustersInRange(location, -1); if (clusters != null) { averageClusterDensity = CalculateClusteringDensity(clusters); if (averageClusterDensity == 0) { itinerary.LocationItineraryRisks.Add(location, RISK.NO_RISK); } else if (averageClusterDensity > HIGHDENSITY) { itinerary.LocationItineraryRisks.Add(location, RISK.HIGH_RISK); } else { itinerary.LocationItineraryRisks.Add(location, RISK.MEDIUM_RISK); } } else { // Check unclustered current locations var oldClusters = ClusterService.OldClustersInRange(location, -1); if (oldClusters != null) { averageClusterDensity = CalculateClusteringDensity(clusters); if (averageClusterDensity == 0) { itinerary.LocationItineraryRisks.Add(location, RISK.NO_RISK); } else if (averageClusterDensity > HIGHDENSITY) { itinerary.LocationItineraryRisks.Add(location, RISK.MODERATE_RISK); } else { itinerary.LocationItineraryRisks.Add(location, RISK.LOW_RISK); } } else { // No clusters near this location itinerary.LocationItineraryRisks.Add(location, RISK.NO_RISK); } } }); itinerary.TotalItineraryRisk = CalculateTotalRisk(itinerary.LocationItineraryRisks); /*itinerary.UserAccessToken = DatabaseEngine.GetUserEmail(access_token)*/; if (access_token != WebAppToken) { var _id = DatabaseEngine.Insert_Itinerary_Risk(itinerary); itinerary.ID = _id; } } return(new ItineraryRiskWrapper(itinerary)); }