calculateDerivedPosition function Null safety

Position calculateDerivedPosition(
  1. Position point,
  2. double range,
  3. double bearing
)

Implementation

Position calculateDerivedPosition(
  Position point,
  double range,
  double bearing,
) {
  var latLocation = point.latitude;
  var lngLocation = point.longitude;

  double EarthRadius = 6371000; // m

  double latA = vc.radians(latLocation!);
  double lonA = vc.radians(lngLocation!);
  double angularDistance = range / EarthRadius;
  double trueCourse = vc.radians(bearing);

  double lat = asin(sin(latA) * cos(angularDistance) +
      cos(latA) * sin(angularDistance) * cos(trueCourse));

  double dlon = atan2(sin(trueCourse) * sin(angularDistance) * cos(latA),
      cos(angularDistance) - sin(latA) * sin(lat));

  double lon = ((lonA + dlon + pi) % (pi * 2)) - pi;

  lat = vc.degrees(lat);
  lon = vc.degrees(lon);

  Position newPoint = Position(
      latitude: lat,
      longitude: lon,
      accuracy: 0.0,
      altitude: 0.0,
      heading: 0.0,
      speed: 0.0,
      speedAccuracy: 0.0,
      timestamp: DateTime.now());

  return newPoint;
}