destinationPoint static method

ILatLong destinationPoint(
  1. ILatLong start,
  2. double distance,
  3. double bearing
)

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

This is an alternative implementation to offset. See http://www.movable-type.co.uk/scripts/latlon.js

Implementation

static ILatLong destinationPoint(ILatLong start, double distance, double bearing) {
  double theta = degToRadian(bearing);
  double delta = distance / EQUATORIAL_RADIUS; // angular distance in radians

  double phi1 = degToRadian(start.latitude);
  double lambda1 = degToRadian(start.longitude);

  double phi2 = asin(sin(phi1) * cos(delta) + cos(phi1) * sin(delta) * cos(theta));
  double lambda2 = lambda1 + atan2(sin(theta) * sin(delta) * cos(phi1), cos(delta) - sin(phi1) * sin(phi2));

  return LatLong(radianToDeg(phi2), radianToDeg(lambda2));
}