| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | import { degreesToRadians, radiansToDegrees } from "@turf/helpers";import { getCoord } from "@turf/invariant";// http://en.wikipedia.org/wiki/Haversine_formula// http://www.movable-type.co.uk/scripts/latlong.html/** * Takes two {@link Point|points} and finds the geographic bearing between them, * i.e. the angle measured in degrees from the north line (0 degrees) * * @name bearing * @param {Coord} start starting Point * @param {Coord} end ending Point * @param {Object} [options={}] Optional parameters * @param {boolean} [options.final=false] calculates the final bearing if true * @returns {number} bearing in decimal degrees, between -180 and 180 degrees (positive clockwise) * @example * var point1 = turf.point([-75.343, 39.984]); * var point2 = turf.point([-75.534, 39.123]); * * var bearing = turf.bearing(point1, point2); * * //addToMap * var addToMap = [point1, point2] * point1.properties['marker-color'] = '#f00' * point2.properties['marker-color'] = '#0f0' * point1.properties.bearing = bearing */export default function bearing(start, end, options) {    if (options === void 0) { options = {}; }    // Reverse calculation    if (options.final === true) {        return calculateFinalBearing(start, end);    }    var coordinates1 = getCoord(start);    var coordinates2 = getCoord(end);    var lon1 = degreesToRadians(coordinates1[0]);    var lon2 = degreesToRadians(coordinates2[0]);    var lat1 = degreesToRadians(coordinates1[1]);    var lat2 = degreesToRadians(coordinates2[1]);    var a = Math.sin(lon2 - lon1) * Math.cos(lat2);    var b = Math.cos(lat1) * Math.sin(lat2) -        Math.sin(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1);    return radiansToDegrees(Math.atan2(a, b));}/** * Calculates Final Bearing * * @private * @param {Coord} start starting Point * @param {Coord} end ending Point * @returns {number} bearing */function calculateFinalBearing(start, end) {    // Swap start & end    var bear = bearing(end, start);    bear = (bear + 180) % 360;    return bear;}
 |