Кардинальное направление широты и долготы до десятичной дроби

Я пытаюсь извлечь значения широты и долготы из некоторых бюллетеней погоды NOAA. . Проблема в том, что широта и долгота используют кардинальное направление, чтобы указать, в каком направлении находится смещение по широте или долготе, а не «чистое» десятичное число, которое указывает направление смещения по знаку числа (т.е. положительное или отрицательное).

Получение координат:

    >>> import urllib2, re
    >>> url = 'http://weather.noaa.gov/pub/data/raw/we/weca43.pheb.tib.cax.txt'
    >>> request = urllib2.urlopen(url)
    >>> re.search('COORDINATES\s+-\s+(.*)', request.read()).groups()[0]
    '60.6 SOUTH   25.4 WEST'

Я могу разобрать их, но, поскольку есть несколько способов сделать это, я хотел знать, что я должен иметь в виду, пытаясь найти решение.

Кроме того, Google понимает такие координаты, но API для их разбора, похоже, нет.


person mustafa.0x    schedule 12.08.2013    source источник
comment
Мне трудно понять, какая помощь вам нужна. Южные широты условно отрицательные, как и западные долготы. Я полагаю, вы это уже знаете и говорите нам, что уже можете анализировать текст, извлеченный из бюллетеней – что еще, по вашему мнению, вам нужно иметь в виду?   -  person High Performance Mark    schedule 12.08.2013
comment
Спасибо за согласие, вы также мой голос; нажмите на стрелку вверх   -  person AlexWien    schedule 13.08.2013
comment
Я на самом деле не хотел принимать, но хотел проголосовать: S   -  person mustafa.0x    schedule 13.08.2013


Ответы (2)


если вы найдете слово "ЮГ", умножьте эту широту "60,6" на -1.
если вы найдете слово "ЗАПАД", умножьте эту долготу 25,4 на -1.

Это все!

вы получаете (-60,6, -25,4), что является десятичным представлением.

person AlexWien    schedule 12.08.2013

Используется полное решение:

import urllib2, re
url = 'http://weather.noaa.gov/pub/data/raw/we/weca43.pheb.tib.cax.txt'
request = urllib2.urlopen(url)
coordinates = re.search('COORDINATES\s+-\s+(.*)', request.read()).groups()[0]

p = re.compile(r'\s{2,}')
matches = p.split(coordinates)
matches = [match.split(' ') for match in matches]
for coordinate in matches:
    m = -1 if coordinate[1].upper() in ('SOUTH', 'WEST') else 1
    coordinate[0] = float(coordinate[0]) * m
coordinates = (matches[1][0], matches[0][0])
person mustafa.0x    schedule 14.08.2013