1"""``geopy.units`` module provides utility functions for performing 2angle and distance unit conversions. 3 4Some shortly named aliases are provided for convenience (e.g. 5:func:`.km` is an alias for :func:`.kilometers`). 6""" 7 8import math 9 10# Angles 11 12 13def degrees(radians=0, arcminutes=0, arcseconds=0): 14 """ 15 Convert angle to degrees. 16 """ 17 deg = 0. 18 if radians: 19 deg = math.degrees(radians) 20 if arcminutes: 21 deg += arcminutes / arcmin(degrees=1.) 22 if arcseconds: 23 deg += arcseconds / arcsec(degrees=1.) 24 return deg 25 26 27def radians(degrees=0, arcminutes=0, arcseconds=0): 28 """ 29 Convert angle to radians. 30 """ 31 if arcminutes: 32 degrees += arcminutes / arcmin(degrees=1.) 33 if arcseconds: 34 degrees += arcseconds / arcsec(degrees=1.) 35 return math.radians(degrees) 36 37 38def arcminutes(degrees=0, radians=0, arcseconds=0): 39 """ 40 Convert angle to arcminutes. 41 """ 42 if radians: 43 degrees += math.degrees(radians) 44 if arcseconds: 45 degrees += arcseconds / arcsec(degrees=1.) 46 return degrees * 60. 47 48 49def arcseconds(degrees=0, radians=0, arcminutes=0): 50 """ 51 Convert angle to arcseconds. 52 """ 53 if radians: 54 degrees += math.degrees(radians) 55 if arcminutes: 56 degrees += arcminutes / arcmin(degrees=1.) 57 return degrees * 3600. 58 59 60# Lengths 61 62def kilometers(meters=0, miles=0, feet=0, nautical=0): 63 """ 64 Convert distance to kilometers. 65 """ 66 ret = 0. 67 if meters: 68 ret += meters / 1000. 69 if feet: 70 ret += feet / ft(1.) 71 if nautical: 72 ret += nautical / nm(1.) 73 ret += miles * 1.609344 74 return ret 75 76 77def meters(kilometers=0, miles=0, feet=0, nautical=0): 78 """ 79 Convert distance to meters. 80 """ 81 return (kilometers + km(nautical=nautical, miles=miles, feet=feet)) * 1000 82 83 84def miles(kilometers=0, meters=0, feet=0, nautical=0): 85 """ 86 Convert distance to miles. 87 """ 88 ret = 0. 89 if nautical: 90 kilometers += nautical / nm(1.) 91 if feet: 92 kilometers += feet / ft(1.) 93 if meters: 94 kilometers += meters / 1000. 95 ret += kilometers / 1.609344 96 return ret 97 98 99def feet(kilometers=0, meters=0, miles=0, nautical=0): 100 """ 101 Convert distance to feet. 102 """ 103 ret = 0. 104 if nautical: 105 kilometers += nautical / nm(1.) 106 if meters: 107 kilometers += meters / 1000. 108 if kilometers: 109 miles += mi(kilometers=kilometers) 110 ret += miles * 5280 111 return ret 112 113 114def nautical(kilometers=0, meters=0, miles=0, feet=0): 115 """ 116 Convert distance to nautical miles. 117 """ 118 ret = 0. 119 if feet: 120 kilometers += feet / ft(1.) 121 if miles: 122 kilometers += km(miles=miles) 123 if meters: 124 kilometers += meters / 1000. 125 ret += kilometers / 1.852 126 return ret 127 128 129# Compatible names 130 131rad = radians 132arcmin = arcminutes 133arcsec = arcseconds 134km = kilometers 135m = meters 136mi = miles 137ft = feet 138nm = nautical 139