calculateDestination static method

Map<String, double> calculateDestination({
  1. required double lat,
  2. required double lon,
  3. required double bearing,
  4. required double distance,
})

Calculates the destination point given a starting point, bearing, and distance.

Parameters:

  • lat: Starting latitude in decimal degrees
  • lon: Starting longitude in decimal degrees
  • bearing: Bearing in degrees (0-360, clockwise from north)
  • distance: Distance in meters

Returns: A map containing 'latitude' and 'longitude' of the destination

Example:

final dest = GeoMath.calculateDestination(
  37.7749, -122.4194, // San Francisco
  45,                // northeast
  1000,              // 1 km
);
print(dest); // {latitude: ..., longitude: ...}

Implementation

static Map<String, double> calculateDestination({
  required double lat,
  required double lon,
  required double bearing,
  required double distance,
}) {
  final latRad = degreesToRadians(lat);
  final lonRad = degreesToRadians(lon);
  final bearingRad = degreesToRadians(bearing);

  final angularDistance = distance / earthRadius;

  final lat2Rad = asin(
    sin(latRad) * cos(angularDistance) +
        cos(latRad) * sin(angularDistance) * cos(bearingRad),
  );

  final lon2Rad = lonRad +
      atan2(
        sin(bearingRad) * sin(angularDistance) * cos(latRad),
        cos(angularDistance) - sin(latRad) * sin(lat2Rad),
      );

  return {
    'latitude': radiansToDegrees(lat2Rad),
    'longitude': radiansToDegrees(lon2Rad),
  };
}