Как вы конвертируете десятичные градусы в градусы? Минуты секунд в Python? Есть ли уже написанная формула?
Как конвертировать DD в DMS в Python
Ответ 1
Это именно то, что был изобретен divmod
для:
>>> def decdeg2dms(dd):
... mnt,sec = divmod(dd*3600,60)
... deg,mnt = divmod(mnt,60)
... return deg,mnt,sec
>>> dd = 45 + 30.0/60 + 1.0/3600
>>> print dd
45.5002777778
>>> decdeg2dms(dd)
(45.0, 30.0, 1.0)
Ответ 2
Вот моя обновленная версия на основе Paul McGuire. Это должно правильно обрабатывать негативы.
def decdeg2dms(dd):
is_positive = dd >= 0
dd = abs(dd)
minutes,seconds = divmod(dd*3600,60)
degrees,minutes = divmod(minutes,60)
degrees = degrees if is_positive else -degrees
return (degrees,minutes,seconds)
Ответ 3
Всего несколько комбинаций * 60
и несколько укорочений int
, т.е.:
>>> decdegrees = 31.125
>>> degrees = int(decdegrees)
>>> temp = 60 * (decdegrees - degrees)
>>> minutes = int(temp)
>>> seconds = 60 * (temp - minutes)
>>> print degrees, minutes, seconds
31 7 30.0
>>>
Ответ 4
Если вы хотите правильно обрабатывать негативы, первая ненулевая мера устанавливается отрицательной. Это противоречит обычной практике, чтобы указать все градусы, минуты и секунды как отрицательные (Wikipedia показывает 40 ° 26.7717, -79 ° 56.93172 как допустимый пример ноты градусов-минут, в которых степени отрицательны, а минуты не имеют знака), а градусы как отрицательные не имеют никакого эффекта, если степень составляет 0. Вот функция, которая адекватно обрабатывает это, основываясь на Поле Функции McGuire и baens:
def decdeg2dms(dd):
negative = dd < 0
dd = abs(dd)
minutes,seconds = divmod(dd*3600,60)
degrees,minutes = divmod(minutes,60)
if negative:
if degrees > 0:
degrees = -degrees
elif minutes > 0:
minutes = -minutes
else:
seconds = -seconds
return (degrees,minutes,seconds)
Ответ 5
Это мой код Python:
def DecimaltoDMS(Decimal):
d = int(Decimal)
m = int((Decimal - d) * 60)
s = (Decimal - d - m/60) * 3600.00
z= round(s, 2)
if d >= 0:
print ("N ", abs(d), "º ", abs(m), "' ", abs(z), '" ')
else:
print ("S ", abs(d), "º ", abs(m), "' ", abs(z), '" ')
Ответ 6
Используйте fmod
и округлите, чтобы разделить градусы и фракцию. Умножьте долю на 60 и повторите, чтобы получить минуты и остаток. Затем умножьте эту последнюю часть на 60, чтобы получить количество секунд.
Ответ 7
Знак лучше возвращать отдельно, поэтому его можно использовать для выбора из ('N', 'S')
или ('E', 'W')
, например.
import math
def dd_to_dms(degs):
neg = degs < 0
degs = (-1) ** neg * degs
degs, d_int = math.modf(degs)
mins, m_int = math.modf(60 * degs)
secs = 60 * mins
return neg, d_int, m_int, secs