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;
}