Как преобразовать широту и долготу? - PullRequest
3 голосов
/ 25 апреля 2010

Как рассчитать по этим числам:

51.501690392607,-0.1263427734375

к широте и долготе?

Это должно быть

London, England 51° 32' N 0° 5' W

Ответы [ 4 ]

2 голосов
/ 25 апреля 2010

Чтобы преобразовать 51,501690392607, сначала возьмите целочисленную часть для 51 градуса. Положительные значения севернее; негативы юг.

Тогда возьмите дробную часть: 0,501690392607

Умножить на 60: 60 * 0,501690392607 = 30,10142355642

Возьмите целую часть в течение 30 минут.

Тогда возьмите дробную часть: 0,10142355642

Умножить на 60: 6.0854133852

Округление до ближайшей 1 секунды.

Вы получите: 51 градус северной широты 30 минут 6 секунд.

Для направления восток / запад повторите с востоком положительным и западом отрицательным.

Чтобы найти город, вам придется использовать какую-то базу данных или что-то ...

Я не знаю, почему ваша конверсия не совпадает.

2 голосов
/ 25 апреля 2010

Базовое преобразование между двумя представлениями может быть сделано так:

// to decimal
decimal = degree + minutes/60 + seconds/3600;

// from decimal
degree = int(decimal)
remaining = decimal - degree
minutes = int(remaining*60)
remaining = remaining - minutes/60
seconds = remaining*3600
2 голосов
/ 25 апреля 2010

http://geography.about.com/library/howto/htdegrees.htm

Кажется, это сработало.

1 голос
/ 25 апреля 2010

Для преобразования дробного числа градусов в градусы и минуты в псевдокоде:

degrees = int(frac)
minutes = int((frac - degrees) * 60)

для преобразования "отрицательных" чисел в "S" и "W" (против "N" и "E") соответственно, используйте "if".

Чтобы сделать псевдокод исполняемым, мы могли бы использовать Python ...:

def translate(frac, islatitude):
    if islatitude: decorate = "NS"
    else: decorate = "EW"
    if frac < 0:
        dec = decorate[1]
        frac = abs(frac)
    else:
        dec = decorate[0]
    degrees = int(frac)
    minutes = int((frac - degrees) * 60)
    return "%d %d %s" % (degrees, minutes, dec)

Так, например:

print translate(51.501690392607, True),
print translate(-0.126342773437, False)

будет излучать

51 30 N 0 7 W

Художественное оформление (знаки градусов и минут) зависит от поддержки набора символов вашего устройства вывода - и дуга 7 против 5 минут для координаты W, кажется, является правильным результатом для вводимых вами чисел.

...