// ReSharper disable once MethodTooLong // ReSharper disable once TooManyArguments private static void GetDistanceAndDuration(List <Position> positions, Position lastPosition, Position firstPosition, TargetViewModel trgt) { // ReSharper disable once ComplexConditionExpression if (lastPosition != null && firstPosition != null) { var index = GetPreviousPositionIndexx(positions, lastPosition); if (index == -1) { index = 0; } var p1 = new GeofenceHelper.Position(); p1.Latitude = positions.ElementAt(index).Lat; p1.Longitude = positions.ElementAt(index).Long; var p2 = new GeofenceHelper.Position(); p2.Latitude = firstPosition.Lat; p2.Longitude = firstPosition.Long; trgt.Distance = Math.Round(GeofenceHelper.HaversineFormula(p1, p2, GeofenceHelper.DistanceType.Kilometers), 2); var avgSpeed = GetAvgSpeed(positions, firstPosition, lastPosition); trgt.AvgSpeed = Math.Round(avgSpeed, 2); trgt.MaxSpeed = Math.Round(GetMaxSpeed(positions, firstPosition, lastPosition), 2); } if (double.IsNaN(trgt.Distance)) { trgt.Distance = 0; } trgt.Duration = (DateTime.Parse(trgt.EndPeriod) - DateTime.Parse(trgt.StartPeriod)).TotalSeconds; }
public async void Run(IBackgroundTaskInstance taskInstance) { var deferral = taskInstance.GetDeferral(); try { // Get all the reports from the system for geofence activity. IReadOnlyList <GeofenceStateChangeReport> reports = GeofenceMonitor.Current.ReadReports(); // Filter down to the reports that we recognise. var filteredReports = GeofenceHelper.FilterReports(reports); // Log them to our file for future reading and so that any UI // can pick them up if it wants to. foreach (var report in filteredReports) { await GeofenceHelper.WritePositionToLogFileAsync( report.NewState, report.Geoposition); } } finally { deferral.Complete(); } }
private static double GetDirection(CreateTeltonikaGps tk103Gps, GeofenceHelper.Position lastPos) { var dir = !lastPos.Equals(default(GeofenceHelper.Position)) ? GeofenceHelper.DegreeBearing(lastPos.Latitude, lastPos.Longitude, tk103Gps.Lat, tk103Gps.Long) : 0; return(dir); }
async void OnUnregister(object sender, RoutedEventArgs e) { if (GeofenceHelper.IsRegistered) { GeofenceHelper.RemoveTaskCompletedHandler( this.BackgroundTaskCompletedHandler); GeofenceHelper.Unregister(); this.UpdateStatusDependentProperties(); } }
private static double GetGpsDistance(List <TLGpsDataEvent> gpsDataEvents) { var distance = 0.0; var firstPos = gpsDataEvents.First(); foreach (var p in gpsDataEvents.Skip(1)) { distance += Math.Round(GeofenceHelper.CalculateDistance(firstPos.Lat, firstPos.Long, p.Lat, p.Long), 2); firstPos = p; } return(distance); }
double CalculateDistance(double lat1, double log, double lat2, double log2) { var p1 = new GeofenceHelper.Position(); p1.Latitude = lat1; p1.Longitude = log; var p2 = new GeofenceHelper.Position(); p2.Latitude = lat2; p2.Longitude = log2; return(Math.Round(GeofenceHelper.HaversineFormula(p1, p2, GeofenceHelper.DistanceType.Kilometers), 2)); }
async void OnRegisterAtCurrentLocation(object s, RoutedEventArgs e) { // We register a 1km fence where the user has to dwell for 30 seconds before // we expect to get notified that they have entered/exited the fence. await GeofenceHelper.RegisterAsync( 1000.0d, MonitoredGeofenceStates.Entered | MonitoredGeofenceStates.Exited, TimeSpan.FromSeconds(30)); this.UpdateStatusDependentProperties(); GeofenceHelper.AddTaskCompletedHandler( this.BackgroundTaskCompletedHandler); }
async void OnLoaded(object sender, Windows.UI.Xaml.RoutedEventArgs e) { this.DataContext = this; await this.ReloadLogFileEntriesAsync(); this.UpdateStatusDependentProperties(); if (GeofenceHelper.IsRegistered) { // If we're already registered then we want to know whenever our background // task completes so that we can update the UI. GeofenceHelper.AddTaskCompletedHandler(this.BackgroundTaskCompletedHandler); } }
public async Task Consume(ConsumeContext <TlFuelEevents> context) { //await _semaphore.WaitAsync(); using (var contextFScope = _dbContextScopeFactory.Create()) { _db = contextFScope.DbContexts.Get <SmartFleetObjectContext>(); var fuelRecordMsg = context.Message.Events.OrderBy(x => x.DateTimeUtc).Last(); var lastRecord = await _db.FuelConsumptions.OrderByDescending(x => x.DateTimeUtc) // ReSharper disable once TooManyChainedReferences .FirstOrDefaultAsync(x => x.VehicleId == fuelRecordMsg.VehicleId); var entity = SetFuelConsumptionobject(fuelRecordMsg); // ReSharper disable once ComplexConditionExpression if (lastRecord != null && fuelRecordMsg.MileStoneCalculated || lastRecord == null) { if (lastRecord != null) { var firstPos = context.Message.TlGpsDataEvents.First(); foreach (var p in context.Message.TlGpsDataEvents.Skip(1)) { entity.Milestone += Math.Round(GeofenceHelper.CalculateDistance(firstPos.Lat, firstPos.Long, p.Lat, p.Long)); firstPos = p; } } } else if (!fuelRecordMsg.MileStoneCalculated) { entity.TotalFuelConsumed = fuelRecordMsg.FuelConsumption; } _db.FuelConsumptions.Add(entity); await contextFScope.SaveChangesAsync().ConfigureAwait(false); // _semaphore.Release(); } }
// ReSharper disable once MethodTooLong // ReSharper disable once TooManyArguments private static void GetDistanceAndDuration(List <Position> positions, TargetViewModel trgt, DateTime currenPosition, DateTime positionEnd) { // ReSharper disable once ComplexConditionExpression var points = positions.Where(x => x.Timestamp >= currenPosition && x.Timestamp <= positionEnd).ToList(); var avgSpeed = points.Average(x => x.Speed); trgt.AvgSpeed = Math.Round(avgSpeed, 2); trgt.MaxSpeed = Math.Round(points.Max(x => x.Speed), 2); trgt.Distance = 0; // ReSharper disable once ComplexConditionExpression if (points.Any() && trgt.MotionStatus != "Stopped") { var firstPos = points.First(); foreach (var p in points.OrderBy(x => x.Timestamp).Skip(1)) { var dis = Math.Round(GeofenceHelper.HaversineFormula(new GeofenceHelper.Position { Latitude = firstPos.Lat, Longitude = firstPos.Long }, new GeofenceHelper.Position { Latitude = p.Lat, Longitude = p.Long }, GeofenceHelper.DistanceType.Kilometers), 2); if (!double.IsNaN(dis)) { trgt.Distance += dis; } firstPos = p; } } if (double.IsNaN(trgt.Distance)) { trgt.Distance = 0; } trgt.Distance = Math.Round(trgt.Distance, 2); trgt.Duration = (DateTime.Parse(trgt.EndPeriod) - DateTime.Parse(trgt.StartPeriod)).TotalSeconds; }
async Task ReloadLogFileEntriesAsync() { this.logEntries = (await GeofenceHelper.GetLogFileEntriesAsync()).ToList(); this.OnPropertyChanged("LogEntries"); }
async void OnClearLogs(object sender, RoutedEventArgs e) { await GeofenceHelper.ClearLogAsync(); await this.ReloadLogFileEntriesAsync(); }