@NonNull
  public static Point destination(@NonNull Point point, @FloatRange(from = 0) double distance,
                                  @FloatRange(from = -180, to = 180) double bearing,
                                  @NonNull @TurfConstants.TurfUnitCriteria String units) {

    double longitude1 = degreesToRadians(point.longitude());
    double latitude1 = degreesToRadians(point.latitude());
    double bearingRad = degreesToRadians(bearing);

    double radians = TurfConversion.lengthToRadians(distance, units);

    double latitude2 = Math.asin(Math.sin(latitude1) * Math.cos(radians)
      + Math.cos(latitude1) * Math.sin(radians) * Math.cos(bearingRad));
    double longitude2 = longitude1 + Math.atan2(Math.sin(bearingRad)
        * Math.sin(radians) * Math.cos(latitude1),
      Math.cos(radians) - Math.sin(latitude1) * Math.sin(latitude2));

    return Point.fromLngLat(
      radiansToDegrees(longitude2), radiansToDegrees(latitude2));
  }
@ NonNull public static Point destination ( @ NonNull Point point , @ FloatRange ( from = 0 ) double distance , @ FloatRange ( from = - 180 , to = 180 ) double bearing , @ NonNull @ TurfConstants . TurfUnitCriteria String units ) { double longitude1 = degreesToRadians ( point . longitude ( ) ) ; double latitude1 = degreesToRadians ( point . latitude ( ) ) ; double bearingRad = degreesToRadians ( bearing ) ; double radians = TurfConversion . lengthToRadians ( distance , units ) ; double latitude2 = Math . asin ( Math . sin ( latitude1 ) * Math . cos ( radians ) + Math . cos ( latitude1 ) * Math . sin ( radians ) * Math . cos ( bearingRad ) ) ; double longitude2 = longitude1 + Math . atan2 ( Math . sin ( bearingRad ) * Math . sin ( radians ) * Math . cos ( latitude1 ) , Math . cos ( radians ) - Math . sin ( latitude1 ) * Math . sin ( latitude2 ) ) ; return Point . fromLngLat ( radiansToDegrees ( longitude2 ) , radiansToDegrees ( latitude2 ) ) ; }
Takes a Point and calculates the location of a destination point given a distance in
degrees, radians, miles, or kilometers; and bearing in degrees. This uses the Haversine
formula to account for global curvature.

@param point    starting point used for calculating the destination
@param distance distance from the starting point
@param bearing  ranging from -180 to 180 in decimal degrees
@param units    one of the units found inside {@link TurfConstants.TurfUnitCriteria}
@return destination {@link Point} result where you specified
@see <a href="http://turfjs.org/docs/#destination">Turf Destination documetation</a>
@since 1.2.0