computeOffset static method
Returns the Point resulting from moving a distance from an origin in the specified heading (expressed in degrees clockwise from north).
from
The Point from which to start.
distance
The distance to travel.
heading
The heading in degrees clockwise from north.
Implementation
static Point computeOffset(Point from, double distance, double heading) {
distance /= MathUtils.earthRadius;
heading = toRadians(heading);
// http://williams.best.vwh.net/avform.htm#LL
double fromLat = toRadians(from.x);
double fromLng = toRadians(from.y);
double cosDistance = cos(distance);
double sinDistance = sin(distance);
double sinFromLat = sin(fromLat);
double cosFromLat = cos(fromLat);
double sinLat =
cosDistance * sinFromLat + sinDistance * cosFromLat * cos(heading);
double dLng = atan2(sinDistance * cosFromLat * sin(heading),
cosDistance - sinFromLat * sinLat);
return Point(toDegrees(asin(sinLat)), toDegrees(fromLng + dLng));
}