type Unit = 'km' | 'miles';

/**
 * Calculates the Haversine distance between two coordinates.
 * @param lat1 Latitude of point 1
 * @param lon1 Longitude of point 1
 * @param lat2 Latitude of point 2
 * @param lon2 Longitude of point 2
 * @param unit Unit of measurement: 'km' or 'miles' (default: 'km')
 * @returns Distance between the two coordinates
 */
declare function haversineDistance(lat1: number, lon1: number, lat2: number, lon2: number, unit?: Unit): number;

/**
 * Calculates the midpoint between two latitude/longitude coordinates.
 */
declare function midpoint(lat1: number, lon1: number, lat2: number, lon2: number): {
    latitude: number;
    longitude: number;
};

/**
 * Calculates Vincenty distance between two latitude/longitude points.
 * @param lat1 Latitude of the first point
 * @param lon1 Longitude of the first point
 * @param lat2 Latitude of the second point
 * @param lon2 Longitude of the second point
 * @returns Distance in meters
 */
declare function vincentyDistance(lat1: number, lon1: number, lat2: number, lon2: number): number;

/**
 * Calculates the initial bearing (forward azimuth) from point A to point B.
 * @param lat1 Latitude of the starting point
 * @param lon1 Longitude of the starting point
 * @param lat2 Latitude of the destination point
 * @param lon2 Longitude of the destination point
 * @returns Initial bearing in degrees (0–360°)
 */
declare function initialBearing(lat1: number, lon1: number, lat2: number, lon2: number): number;

/**
 * Calculates the destination point given a start point, distance, and bearing.
 * @param lat Latitude of the start point
 * @param lon Longitude of the start point
 * @param distance Distance to travel
 * @param bearing Bearing in degrees
 * @param unit Unit of distance ('km' or 'miles')
 * @returns Coordinates of the destination point
 */
declare function destinationPoint(lat: number, lon: number, distance: number, bearing: number, unit?: Unit): {
    latitude: number;
    longitude: number;
};

export { destinationPoint, haversineDistance, initialBearing, midpoint, vincentyDistance };
