Esempio n. 1
0
        // 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;
        }
Esempio n. 2
0
        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();
            }
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        async void OnUnregister(object sender, RoutedEventArgs e)
        {
            if (GeofenceHelper.IsRegistered)
            {
                GeofenceHelper.RemoveTaskCompletedHandler(
                    this.BackgroundTaskCompletedHandler);

                GeofenceHelper.Unregister();

                this.UpdateStatusDependentProperties();
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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));
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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();
            }
        }
Esempio n. 10
0
        // 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;
        }
Esempio n. 11
0
 async Task ReloadLogFileEntriesAsync()
 {
     this.logEntries = (await GeofenceHelper.GetLogFileEntriesAsync()).ToList();
     this.OnPropertyChanged("LogEntries");
 }
Esempio n. 12
0
        async void OnClearLogs(object sender, RoutedEventArgs e)
        {
            await GeofenceHelper.ClearLogAsync();

            await this.ReloadLogFileEntriesAsync();
        }