fix: BUG-21 GPS-speed fallback in server route replay
This commit is contained in:
+14
-3
@@ -617,9 +617,20 @@ def get_trip_route(device_id, trip_id):
|
||||
lon = float(p[2])
|
||||
speed = p[3] or 0
|
||||
raw_odo = p[4]
|
||||
speed_source = "obd" if speed > 0 else "gps"
|
||||
# Mirror the Pi's route_points GPS-speed fallback: when OBD speed is
|
||||
# missing (adapter dropout), derive speed from the previous point's
|
||||
# movement so the replay doesn't flatline at 0 km/h while the car moves.
|
||||
if speed <= 0 and prev is not None:
|
||||
seconds = (p[0] - prev[2]).total_seconds()
|
||||
if seconds > 0:
|
||||
dist_km = hav(prev[0], prev[1], lat, lon)
|
||||
seg_speed = dist_km / seconds * 3600
|
||||
if seg_speed <= 220 and dist_km * 1000 >= 8:
|
||||
speed = seg_speed
|
||||
if prev is not None:
|
||||
cumulative += hav(prev[0], prev[1], lat, lon)
|
||||
prev = (lat, lon)
|
||||
prev = (lat, lon, p[0])
|
||||
if raw_odo is not None and float(raw_odo) > 0:
|
||||
odometer = float(raw_odo)
|
||||
else:
|
||||
@@ -628,10 +639,10 @@ def get_trip_route(device_id, trip_id):
|
||||
"datetime": p[0].isoformat(),
|
||||
"latitude": lat,
|
||||
"longitude": lon,
|
||||
"speed": speed,
|
||||
"speed": round(speed, 1),
|
||||
# Mirror the Pi's route_points: OBD speed when we have it,
|
||||
# otherwise the point is sourced from GPS.
|
||||
"speed_source": "obd" if speed > 0 else "gps",
|
||||
"speed_source": speed_source,
|
||||
"odometer": round(odometer, 1),
|
||||
})
|
||||
return {
|
||||
|
||||
Reference in New Issue
Block a user