Преобразование координат GPS из рациональных дробей в градусы

Я пытаюсь понять координаты GPS, возвращенные из тегов EXIF ​​в моих изображениях:

мой аксессор для координат

@property
def GPSCoordinatesRat(self):
coords = (str(self._EXIF_GPSLatitude) +
          str(self._EXIF_GPSLongitude_Ref) +
          str(self._EXIF_GPSLongitude)) +
          str(self._EXIF_GPSLongitude_Ref)

пример

>>> s.GPSCoordinatesRat
'[Fraction(40, 1), Fraction(3901, 100), Fraction(0, 1)]W[Fraction(73, 1), Fraction(4691, 100), Fraction(0, 1)]W'

Как я могу заставить это читать что-то вроде:

35° 42' 1" N, 71° 37' 0" W

Спасибо.


person ensnare    schedule 15.03.2012    source источник
comment
Почему вы конвертируете все в строки?   -  person Ignacio Vazquez-Abrams    schedule 15.03.2012
comment
В противном случае я получаю TypeError: можно только объединить список (не str) в список   -  person ensnare    schedule 15.03.2012
comment
Значит, если сделать что-то неправильно, значит сделать это неправильно? о_О   -  person Ignacio Vazquez-Abrams    schedule 15.03.2012
comment
Что-то не так с этим кодом. Что именно вы планируете делать с выводом этого? Печать удобочитаемая? Запись на другую операцию? Расчеты?   -  person heltonbiker    schedule 15.03.2012
comment
Вы уже знаете, как преобразовать десятичные координаты в часы и минуты?   -  person Tim McNamara    schedule 15.03.2012
comment
Предложение: давая примеры, по крайней мере, старайтесь, чтобы выходные значения основывались на входных данных, а не на каких-то несвязанных случайных числах.   -  person Jim Garrison    schedule 15.03.2012


Ответы (2)


Посмотрите здесь, чтобы преобразовать число с плавающей запятой в градусы, минуты и секунды: http://geography.about.com/library/howto/htdegrees.htm

Что там не упомянуто: Если местоположение находится в западном полушарии, знак отрицательный, т.е. умножьте (целое число) градусов на -1. То же самое для мест в южном полушарии.

person Stefan    schedule 16.03.2012

Передача каждого Fraction конструктору float превратит его в число с плавающей запятой.

>>> float(fractions.Fraction(3901, 100))
39.01
person Ignacio Vazquez-Abrams    schedule 15.03.2012