Skip to content

Commit 3b65d02

Browse files
claudekarussell
authored andcommitted
fix: wrap replay bearing to [0, 360) and compute first-point bearing
TurfMeasurement.bearing() returns [-180, 180] but Android Location expects [0, 360). Apply MathUtils.wrap() consistent with SnapToRoute. Also derive first point bearing from route direction instead of hardcoding 0 (north).
1 parent 534334f commit 3b65d02

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

maplibre-navigation-core/src/commonMain/kotlin/org/maplibre/navigation/core/location/replay/ReplayRouteLocationConverter.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import org.maplibre.navigation.core.models.DirectionsRoute
77
import org.maplibre.navigation.core.utils.Constants
88
import org.maplibre.geojson.turf.TurfMeasurement
99
import org.maplibre.geojson.turf.TurfUnit
10+
import org.maplibre.navigation.core.utils.MathUtils.wrap
1011
import org.maplibre.navigation.core.utils.getCurrentSystemTimeSeconds
1112

1213
open class ReplayRouteLocationConverter(
@@ -75,7 +76,10 @@ open class ReplayRouteLocationConverter(
7576
mockedLocations.add(
7677
if (i - 1 >= 0) {
7778
val bearing = TurfMeasurement.bearing(points[i - 1], points[i])
78-
mockedLocation.copy(bearing = bearing.toFloat())
79+
mockedLocation.copy(bearing = wrap(bearing, 0.0, 360.0).toFloat())
80+
} else if (points.size > 1) {
81+
val bearing = TurfMeasurement.bearing(points[0], points[1])
82+
mockedLocation.copy(bearing = wrap(bearing, 0.0, 360.0).toFloat())
7983
} else {
8084
mockedLocation.copy(bearing = 0f)
8185
}

0 commit comments

Comments
 (0)