// 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 PositionViewModel(CreateTeltonikaGps tk103Gps, Vehicle vehicle, GeofenceHelper.Position lasPosition) { double dir = 0; if (Math.Abs(lasPosition.Latitude - tk103Gps.Lat) > 0.0) { if (Math.Abs(lasPosition.Longitude - tk103Gps.Long) > 0.0) { dir = GetDirection(tk103Gps, lasPosition); } } Latitude = tk103Gps.Lat; Longitude = tk103Gps.Long; Address = tk103Gps.Address; IMEI = tk103Gps.Imei; // SerialNumber = tk103Gps.s; //Direction = tk103Gps.Address Speed = tk103Gps.Speed; VehicleName = vehicle.VehicleName; VehicleId = vehicle.Id.ToString(); CustomerName = vehicle.Customer?.Name; TimeStampUtc = tk103Gps.Timestamp; SetVehicleImage(vehicle, dir); }
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); }
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)); }