コード例 #1
0
        public static void FillDay(DayOfTrip dayOfTrip, List <ActivityPoint> remainedActivities, Dictionary <eActivityType, int> preferences)
        {
            TimeWindow timeWindow;

            //sort first by near to main acitivity then by user prefrences
            //TODO: add sort by rank
            var sortedByLocationAcitivities = remainedActivities.OrderBy(a =>
                                                                         LocationUtils.HaversineDistance(new Location(a.GEPSLatitude, a.GEPSLongtitude),
                                                                                                         new Location(dayOfTrip.MainActivity.Activity.GEPSLatitude, dayOfTrip.MainActivity.Activity.GEPSLongtitude)))
                                              .ThenByDescending(a => GetMatchGrade(a, preferences)).ToList();

            while ((timeWindow = dayOfTrip.GetNextEmptyTimeWindow()) != null)
            {
                List <ActivityTimeSlot> activities = null;
                foreach (var activity in sortedByLocationAcitivities)
                {
                    if ((activities = TryFindTimeForActivityAndTravel(activity, timeWindow)) != null)
                    {
                        dayOfTrip.AppendActivities(activities);
                        sortedByLocationAcitivities.Remove(activity);
                        remainedActivities.Remove(activity);
                        break;
                    }
                }

                if (activities == null)
                {
                    dayOfTrip.AddActivity(new ActivityTimeSlot(timeWindow.TimeSlot, null));
                }
            }

            dayOfTrip.SortedActivities.RemoveAll(a => a.Activity == null && a.IsTraveling == false); //Remove empty time slots
        }
コード例 #2
0
 public static bool IsNearBy(ActivityPoint activityPoint, Location startPoint, int nearByDistanceKm)
 {
     return(LocationUtils.HaversineDistance(new Location(activityPoint.GEPSLatitude, activityPoint.GEPSLongtitude), startPoint) <= nearByDistanceKm);
 }