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);
            }
        }
Ejemplo n.º 2
0
        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));
        }