computeBearing static method
Implementation
static double computeBearing(LatLng start, LatLng end) {
double startLat = start.latitude * math.pi / 180.0;
double startLng = start.longitude * math.pi / 180.0;
double endLat = end.latitude * math.pi / 180.0;
double endLng = end.longitude * math.pi / 180.0;
double dLng = endLng - startLng;
// MapLibre uses Web Mercator projection. Lines drawn are Rhumb lines.
// Compute Rhumb bearing so vehicle and camera align perfectly with long route segments.
double dPhi = math.log(math.tan(endLat / 2.0 + math.pi / 4.0) / math.tan(startLat / 2.0 + math.pi / 4.0));
if (dLng.abs() > math.pi) {
dLng = dLng > 0.0 ? -(2.0 * math.pi - dLng) : (2.0 * math.pi + dLng);
}
double bearing = math.atan2(dLng, dPhi) * 180.0 / math.pi;
return (bearing + 360.0) % 360.0;
}