Source code for turf.helpers._conversions

import numpy as np

from turf.helpers._units import factors, area_factors
from turf.utils.exceptions import InvalidInput
from turf.utils.error_codes import error_code_messages


def c_like_modulo(number, base):

    return number - int(number / base) * base


[docs]def degrees_to_radians(degrees): """ :param degrees: degrees angle :return: angle in radians """ if not isinstance(degrees, (float, int)): raise InvalidInput(error_code_messages["InvalidDegrees"]) radians = c_like_modulo(degrees, 360) return radians * np.pi / 180
[docs]def radians_to_degrees(radians): """ :param radians: radians angle in radians :return: degrees between 0 and 360 """ if not isinstance(radians, (float, int)): raise InvalidInput(error_code_messages["InvalidRadians"]) degrees = c_like_modulo(radians, 2 * np.pi) return degrees * 180 / np.pi
[docs]def length_to_radians(distance, units="kilometers"): """ :param distance: distance in real units :param units: units of the distance. Can be degrees, radians, miles, kilometers, inches, yards, metres, meters, kilometres, kilometers. Defaults to kilometers :return: radians """ if not isinstance(distance, (float, int)): raise (InvalidInput(error_code_messages["InvalidDistance"])) try: factor = factors[units] except KeyError: raise InvalidInput(error_code_messages["InvalidUnits"](units)) return distance / factor
[docs]def radians_to_length(radians, units="kilometers"): """ :param radians: radians in radians across the sphere :param units: units of the distance. Can be degrees, radians, miles, kilometers, inches, yards, metres, meters, kilometres, kilometers. Defaults to kilometers :return: distance """ try: factor = factors[units] except KeyError: raise InvalidInput(error_code_messages["InvalidUnits"](units)) return radians * factor
[docs]def length_to_degrees(distance, units="kilometers"): """ :param distance: distance in real units :param units: units of the distance. Can be degrees, radians, miles, kilometers, inches, yards, metres, meters, kilometres, kilometers. Defaults to kilometers :return: degrees """ return radians_to_degrees(length_to_radians(distance, units))
[docs]def convert_length(length, original_unit="kilometers", final_unit="kilometers"): """ :param length: length to be converted :param original_unit: original unit of the length :param final_unit: return unit of the length :return: the converted length """ if not isinstance(length, (float, int)) or length < 0: raise InvalidInput(error_code_messages["InvalidLength"]) return radians_to_length(length_to_radians(length, original_unit), final_unit)
[docs]def convert_area(area, original_unit="meters", final_unit="kilometers"): """ :param area: area to be converted :param original_unit: original unit of the area :param final_unit: returned unit of area :return: the converted area """ if not isinstance(area, (float, int)) or area < 0: raise InvalidInput(error_code_messages["InvalidArea"]) try: start_factor = area_factors[original_unit] except KeyError: raise InvalidInput( InvalidInput(error_code_messages["InvalidUnits"](original_unit)) ) try: final_factor = area_factors[final_unit] except KeyError: raise InvalidInput( InvalidInput(error_code_messages["InvalidUnits"](final_unit)) ) return (area / start_factor) * final_factor