intermediate method
Coordinate
intermediate({
- required Coordinate startPoint,
- required Coordinate endPoint,
- required double fraction,
This function returns the point at given fraction between startPoint and endPoint
startPoint
Initial coordinates
endPoint
Final coordinates
fraction
Fraction between coordinates
Returns Intermediate coordinates between startPoint and endPoint
final istCoordinates = Coordinate(41.28111111, 28.75333333); // The coordinates of Istanbul Airport
final jfkCoordinates = Coordinate(40.63980103, -73.77890015); // The coordinates of New York JFK Airport
final fraction = 0.25;
final intermediate = greatCircle.intermediate(istCoordinates, jfkCoordinates, fraction);
Implementation
Coordinate intermediate(
{required Coordinate startPoint,
required Coordinate endPoint,
required double fraction}) {
if (startPoint == endPoint) return startPoint;
final double lat1 = startPoint.latitude.toRadians();
final double lat2 = endPoint.latitude.toRadians();
final double lon1 = startPoint.longitude.toRadians();
final double lon2 = endPoint.longitude.toRadians();
final double dLon = lon2 - lon1;
final double dLat = lat2 - lat1;
final double a = sin(dLat / 2) * sin(dLat / 2) +
cos(lat1) * cos(lat2) * sin(dLon / 2) * sin(dLon / 2);
final double c = 2 * atan2(sqrt(a), sqrt(1 - a));
final double A = sin((1 - fraction) * c) / sin(c);
final double B = sin(fraction * c) / sin(c);
final double x = A * cos(lat1) * cos(lon1) + B * cos(lat2) * cos(lon2);
final double y = A * cos(lat1) * sin(lon1) + B * cos(lat2) * sin(lon2);
final double z = A * sin(lat1) + B * sin(lat2);
final double lat = atan2(z, sqrt(x * x + y * y));
final double lon = atan2(y, x);
return Coordinate(lat.toDegrees(), lon.toDegrees());
}