computeBearing static method

double computeBearing(
  1. LatLng start,
  2. LatLng end
)

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;
}