destination method

Coordinate destination({
  1. required Coordinate startPoint,
  2. required double bearing,
  3. required double distance,
})

This function calculates the destination point and final bearing travelling along a (shortest distance) great circle arc for a given start point, initial bearing and distance

startPoint Initial coordinates distance Distance on great circle bearing Bearing Returns Destination coordinates

final istCoordinates = Coordinate(41.28111111, 28.75333333); // The coordinates of Istanbul Airport
final jfkCoordinates = Coordinate(40.63980103, -73.77890015); // The coordinates of New York JFK Airport
final greatCircle = GreatCircle();
final bearing = greatCircle.bearing(istCoordinates, jfkCoordinates);

final distance = 1000; // km
final destination = greatCircle.destination(istCoordinates, distance, bearing); // The coordinates of point which is at 1000th km great circle between Istanbul Airport and JFK Airport

Implementation

Coordinate destination(
    {required Coordinate startPoint,
    required double bearing,
    required double distance}) {
  final double lat1 = startPoint.latitude.toRadians();
  final double lon1 = startPoint.longitude.toRadians();

  final double sinLat = sin(lat1) * cos(distance / earthRadiusKm) +
      cos(lat1) * sin(distance / earthRadiusKm) * cos(bearing.toRadians());
  final double lat = asin(sinLat);

  final double y =
      sin(bearing.toRadians()) * sin(distance / earthRadiusKm) * cos(lat1);
  final double x = cos(distance / earthRadiusKm) - sin(lat1) * sin(lat);

  final lon = lon1 + atan2(y, x);
  return Coordinate(lat.toDegrees(), lon.toDegrees());
}