code: public final Position predict(double distanceKm, double courseDegrees) {
          assertWithMsg(alt == 0.0, "Predictions only valid for Earth's surface");
          double dr = distanceKm / EARTH_RADIUS_KM;
          double latR = toRadians(lat);
          double lonR = toRadians(lon);
          double courseR = toRadians(courseDegrees);
          double lat2Radians = asin(sin(latR) * cos(dr) + cos(latR) * sin(dr) * cos(courseR));
          double lon2Radians = atan2(sin(courseR) * sin(dr) * cos(latR), cos(dr) - sin(latR)
                  * sin(lat2Radians));
          double lon3Radians = mod(lonR + lon2Radians + PI, 2 * PI) - PI;
          return new Position(FastMath.toDegrees(lat2Radians), FastMath.toDegrees(lon3Radians));
      }
docs: Predicts position travelling along a great circle arc based on the
  Haversine formula.
  
  From http://www.movable-type.co.uk/scripts/latlong.html
  
  @param distanceKm
  @param courseDegrees
  @return