deg.py (624B) - Raw
1 from collections import namedtuple 2 3 4 from decimal import Decimal as Dec 5 6 7 class Deg(namedtuple('Deg', ['deg', 'mm', 'ss'])): 8 def __str__(self): 9 return "%03d-%02d-%.1f" % (self.deg, self.mm, self.ss) 10 11 12 def guess(inp): 13 if isinstance(inp, str) and '-' in inp: 14 deg, mm, ss = inp.split('-') 15 ddeg, dmm, dss = Dec(deg), Dec(mm), Dec(ss) 16 return ddeg + dmm/60 + dss/3600 17 else: 18 return Dec(inp) 19 20 21 def hms(deg): 22 assert isinstance(deg, Dec) 23 pdeg, pmm = divmod(deg, 1) 24 pmm = pmm * Dec(60) 25 pmm, pss = divmod(pmm, 1) 26 pss = pss * Dec(60) 27 return Deg(pdeg, pmm, pss)