async void Geolocator_PositionChanged(object sender, PositionEventArgs e)
{
// Only update the route if we are meant to be recording coordinates
if (IsRecording)
{
var userLocation = e.Position;
TripPoint previous = null;
double newDistance = 0;
if (CurrentTrip.Points.Count > 1)
{
previous = CurrentTrip.Points[CurrentTrip.Points.Count - 1];
newDistance = DistanceUtils.CalculateDistance(userLocation.Latitude,
userLocation.Longitude, previous.Latitude, previous.Longitude);
if (newDistance > 4) // if more than 4 miles then gps is off don't use
return;
}
var point = new TripPoint
{
TripId = CurrentTrip.Id,
RecordedTimeStamp = DateTime.UtcNow,
Latitude = userLocation.Latitude,
Longitude = userLocation.Longitude,
Sequence = CurrentTrip.Points.Count,
Speed = -255,
RPM = -255,
ShortTermFuelBank = -255,
LongTermFuelBank = -255,
ThrottlePosition = -255,
RelativeThrottlePosition = -255,
Runtime = -255,
DistanceWithMalfunctionLight = -255,
EngineLoad = -255,
MassFlowRate = -255,
EngineFuelRate = -255,
VIN = "-255"
};
//Add OBD data
if (obdDataProcessor != null)
point.HasSimulatedOBDData = obdDataProcessor.IsObdDeviceSimulated;
await AddOBDDataToPoint(point);
CurrentTrip.Points.Add(point);
try
{
if (obdDataProcessor != null)
{
//Push the trip data packaged with the OBD data to the IOT Hub
obdDataProcessor.SendTripPointToIOTHub(CurrentTrip.Id, CurrentTrip.UserId, point);
}
}
catch (Exception ex)
{
Logger.Instance.Report(ex);
}
if (CurrentTrip.Points.Count > 1 && previous != null)
{
CurrentTrip.Distance += newDistance;
Distance = CurrentTrip.TotalDistanceNoUnits;
//calculate gas usage
var timeDif1 = point.RecordedTimeStamp - previous.RecordedTimeStamp;
CurrentTrip.FuelUsed += fuelConsumptionRate * 0.00002236413 * timeDif1.TotalSeconds;
if (CurrentTrip.FuelUsed == 0)
FuelConsumption = "N/A";
else
FuelConsumption = Settings.MetricUnits
? (CurrentTrip.FuelUsed * 3.7854).ToString("N2")
: CurrentTrip.FuelUsed.ToString("N2");
}
else
{
CurrentTrip.FuelUsed = 0;
FuelConsumption = "N/A";
}
var timeDif = point.RecordedTimeStamp - CurrentTrip.RecordedTimeStamp;
//track seconds, minutes, then hours
if (timeDif.TotalMinutes < 1)
ElapsedTime = $"{timeDif.Seconds}s";
else if (timeDif.TotalHours < 1)
ElapsedTime = $"{timeDif.Minutes}m {timeDif.Seconds}s";
else
ElapsedTime = $"{(int)timeDif.TotalHours}h {timeDif.Minutes}m {timeDif.Seconds}s";
if (point.EngineLoad != -255)
EngineLoad = $"{(int)point.EngineLoad}%";
FuelConsumptionUnits = Settings.MetricUnits ? "Liters" : "Gallons";
DistanceUnits = Settings.MetricDistance ? "Kilometers" : "Miles";
OnPropertyChanged("Stats");
}
CurrentPosition = e.Position;
}