public static void CalculateStatistics(this StatisticsItem item, List<LocationTrack> dayTrackList, LocationTrack lastTrack) { dayTrackList.Sort((t1, t2) => t1.TimeStamp.CompareTo(t2.TimeStamp)); LocationTrack lastSaved = dayTrackList.LastOrDefault(); if (lastSaved == null) { return; } if (lastSaved.TimeStamp.AddMinutes(10) < lastTrack.TimeStamp) { //Difference too much return; } double? distance = lastTrack.Location.Distance(lastSaved.Location); if (!distance.HasValue) { return; } decimal co2Index = GetCo2Index(lastTrack.Speed); decimal distanceValue = Convert.ToDecimal(distance.Value); decimal co2InKilograms = 0.15m * co2Index * distanceValue / (1000.0m); const decimal co2RecycleInOneDay = 44.0m / 365.0m; decimal result = co2InKilograms/co2RecycleInOneDay; item.Day = lastTrack.TimeStamp.Date; item.UserProfile = lastTrack.UserProfile; item.Value += result; item.Consumer = "Car"; }
private LocationTrack CreateLocationTrack(Position position, string token) { UserProfile user = _db.UserProfiles.First(u => u.UserName == token); var locationTrack = new LocationTrack(); locationTrack.UserProfile = user; locationTrack.TimeStamp = DateTime.MinValue.Add(TimeSpan.FromTicks(position.UtcTicks)); locationTrack.Location = DbGeography.FromText(string.Format("POINT ({0} {1})",position.Latitude, position.Longitude)); locationTrack.Speed = position.Speed; locationTrack.Id = Guid.NewGuid(); return locationTrack; }