destinationPointByDistanceAndBearing method
Coordinate
destinationPointByDistanceAndBearing(
- Coordinate l,
- num distance,
- num bearing, [
- num? radius,
calculate a destination point given the distance and bearing
Implementation
Coordinate destinationPointByDistanceAndBearing(
Coordinate l, num distance, num bearing,
[num? radius]) {
radius = radius ?? _RADIUS;
num angularDistanceRadius = distance / radius;
num bearingRadians = degToRadian(bearing as double);
num latRadians = degToRadian(l.y);
num lngRadians = degToRadian(l.x);
num sinLatRadians = math.sin(latRadians);
num cosLatRadians = math.cos(latRadians);
num sinAngularDistanceRadius = math.sin(angularDistanceRadius);
num cosAngularDistanceRadius = math.cos(angularDistanceRadius);
num sinBearingRadians = math.sin(bearingRadians);
num cosBearingRadians = math.cos(bearingRadians);
var sinLatRadians2 = sinLatRadians * cosAngularDistanceRadius +
cosLatRadians * sinAngularDistanceRadius * cosBearingRadians;
num latRadians2 = math.asin(sinLatRadians2);
var y = sinBearingRadians * sinAngularDistanceRadius * cosLatRadians;
var x = cosAngularDistanceRadius - sinLatRadians * sinLatRadians2;
num lngRadians2 = lngRadians + math.atan2(y, x);
return Coordinate((radianToDeg(lngRadians2 as double) + 540) % 360 - 180,
radianToDeg(latRadians2 as double));
}