Source code for turf.bearing._bearing

import numpy as np

from turf.invariant import get_coords_from_features
from turf.helpers import degrees_to_radians, radians_to_degrees


[docs]def bearing(start, end, options=None): """ Takes two points and finds the geographic bearing between them, i.e. the angle measured in degrees from the north line (0 degrees) :param start: starting point [lng, lat] or Point feature :param end: ending point [lng, lat] or Point feature :param options: dictionary with options: [options["final"]] - calculates the final bearing if true :return: bearing in decimal degrees, between -180 and 180 (positive clockwise) """ if not options: options = {} if isinstance(options, dict) and "final" in options: return calculate_final_bearing(start, end) start = get_coords_from_features(start, ["Point"]) end = get_coords_from_features(end, ["Point"]) lon1 = degrees_to_radians(start[0]) lon2 = degrees_to_radians(end[0]) lat1 = degrees_to_radians(start[1]) lat2 = degrees_to_radians(end[1]) a = np.sin(lon2 - lon1) * np.cos(lat2) b = np.cos(lat1) * np.sin(lat2) - np.sin(lat1) * np.cos(lat2) * np.cos(lon2 - lon1) return radians_to_degrees(np.arctan2(a, b))
def calculate_final_bearing(start, end): bear = bearing(end, start) return (bear + 180) % 360