public static Dictionary<DayOfWeek, double> Distance(Int16 carId)
        {
            Dictionary<DayOfWeek, double> distancePerDay = new Dictionary<DayOfWeek, double>();
            distancePerDay.Add(DayOfWeek.Monday, 0);
            distancePerDay.Add(DayOfWeek.Tuesday, 0);
            distancePerDay.Add(DayOfWeek.Wednesday, 0);
            distancePerDay.Add(DayOfWeek.Thursday, 0);
            distancePerDay.Add(DayOfWeek.Friday, 0);
            distancePerDay.Add(DayOfWeek.Saturday, 0);
            distancePerDay.Add(DayOfWeek.Sunday, 0);

            TimeSpan day = new TimeSpan(24, 0, 0);

            DBController dbc = new DBController();
            List<Int64> tripIds = dbc.GetTripIdsByCarId(carId);
            dbc.Close();

            foreach (Int64 tripId in tripIds) {
                List<Fact> entries = dbc.GetSpatioTemporalByCarIdAndTripId(carId, tripId);

                for (int i = 1; i < entries.Count; i++) {
                    distancePerDay[entries[i].Temporal.Timestamp.DayOfWeek] += entries[i].Spatial.DistanceToLag;
                }
            }

            return distancePerDay;
        }
Пример #2
0
        public static Dictionary<SpatialInformation, SpatialInformation> ByDistance(Int16 carId, Int64 tripId, double MinimumGapDistance)
        {
            Dictionary<SpatialInformation, SpatialInformation> tripGaps = new Dictionary<SpatialInformation, SpatialInformation>();

            DBController dbc = new DBController();
            List<Fact> facts = new List<Fact>(dbc.GetSpatioTemporalByCarIdAndTripId(carId, tripId));
            dbc.Close();

            for (int i = 1; i < facts.Count; i++) {
                if (facts[i].Spatial.Point.GetDistanceTo(facts[i - 1].Spatial.Point) > MinimumGapDistance) {
                    tripGaps.Add(facts[i - 1].Spatial, facts[i].Spatial);
                }
            }

            return tripGaps;
        }
Пример #3
0
        public static Dictionary<SpatialInformation, SpatialInformation> ByTime(Int16 carId, Int64 tripId, TimeSpan MinimumGapTime)
        {
            Dictionary<SpatialInformation, SpatialInformation> tripGaps = new Dictionary<SpatialInformation, SpatialInformation>();

            DBController dbc = new DBController();
            List<Fact> facts = new List<Fact>(dbc.GetSpatioTemporalByCarIdAndTripId(carId, tripId));
            dbc.Close();

            for (int i = 1; i < facts.Count; i++) {
                if (facts[i].Temporal.Timestamp - facts[i - 1].Temporal.Timestamp > MinimumGapTime) {
                    tripGaps.Add(facts[i-1].Spatial, facts[i].Spatial);
                }
            }

            return tripGaps;
        }
Пример #4
0
        //Returns average kilometers per trip for each week number
        public static Dictionary<KeyValuePair<int, int>, double> AverageTripDistance(Int16 carId)
        {
            //Get calendar for week number reference
            DateTimeFormatInfo formatInformation = DateTimeFormatInfo.CurrentInfo;
            Calendar calendar = formatInformation.Calendar;

            //Dictionary of <Year, Week>, <TripCount, Distance>
            Dictionary<KeyValuePair<int, int>, KeyValuePair<int, double>> results = new Dictionary<KeyValuePair<int, int>, KeyValuePair<int, double>>();

            //Get trips to get distances from
            DBController dbc = new DBController();
            List<Int64> tripIds = dbc.GetTripIdsByCarId(carId);

            foreach (Int64 tripId in tripIds) {
                List<Fact> facts = dbc.GetSpatioTemporalByCarIdAndTripId(carId, tripId);
                //Save starting points of trip, in case trip is split up later
                int startIndex = 0;
                double distanceForWeek = 0;
                int startWeek = calendar.GetWeekOfYear(facts[0].Temporal.Timestamp, formatInformation.CalendarWeekRule, formatInformation.FirstDayOfWeek);
                int startYear = facts[0].Temporal.Timestamp.Year;

                for (int i = 1; i < facts.Count; i++) {

                    //If week or year changes in the trip, save that part from startIndex to current index
                    int week = calendar.GetWeekOfYear(facts[i].Temporal.Timestamp, formatInformation.CalendarWeekRule, formatInformation.FirstDayOfWeek);
                    int year = facts[i].Temporal.Timestamp.Year;
                    if (week != startWeek || year != startYear) {
                        for (int j = startIndex; j <= i; j++) {
                            distanceForWeek += facts[j].Spatial.DistanceToLag;
                        }

                        KeyValuePair<int, int> tripPartKey = new KeyValuePair<int, int>(startYear, startWeek);

                        if (results.ContainsKey(tripPartKey)) {
                            results[tripPartKey] = new KeyValuePair<int, double>(results[tripPartKey].Key + 1, results[tripPartKey].Value + distanceForWeek);
                        } else {
                            results.Add(new KeyValuePair<int, int>(startYear, startWeek), new KeyValuePair<int, double>(1, distanceForWeek));
                        }

                        //Update starting points for new part of trip
                        startIndex = i;
                        startWeek = week;
                        startYear = year;
                        distanceForWeek = 0;
                    }
                }

                //At the end of the trip, save current part from startIndex to current index.
                for (int j = startIndex; j < facts.Count; j++) {
                    distanceForWeek += facts[j].Spatial.DistanceToLag;
                }

                KeyValuePair<int, int> key = new KeyValuePair<int, int>(startYear, startWeek);

                if (results.ContainsKey(key)) {
                    results[key] = new KeyValuePair<int, double>(results[key].Key + 1, results[key].Value + distanceForWeek);
                } else {
                    results.Add(new KeyValuePair<int, int>(startYear, startWeek), new KeyValuePair<int, double>(1, distanceForWeek));
                }
            }

            dbc.Close();

            //Calculate average distance per week, and return result
            Dictionary<KeyValuePair<int, int>, double> weeklyAverageTripDistance = new Dictionary<KeyValuePair<int, int>, double>();

            foreach (KeyValuePair<KeyValuePair<int, int>, KeyValuePair<int, double>> kvp in results) {
                weeklyAverageTripDistance.Add(kvp.Key, (kvp.Value.Value / kvp.Value.Key));
            }

            return weeklyAverageTripDistance;
        }