Как мне преобразовать эти координаты в реальные числа? - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть что-то вроде этого в двух столбцах в одном кадре данных data= pd.read_csv('xxxxxxxxxxxx.dat',delimiter=';',encoding='latin_1') в python Широта = 60 ° 11.7765 Долгота = 024 ° 57.3073

И я хотел бы получить это:

Широта = 60.1177 .... Долгота = 024.573 ....

1 Ответ

0 голосов
/ 26 апреля 2020

Вопрос, который вы задали, похоже, требует простой замены некоторого символа, а не реального преобразования координат. Благодаря комментариям я понял, что эта двусмысленность была связана с тем, что вы сами не понимали, как получить конверсию. Среди различных типов координат мы находим формат DDM (градусы, десятичные минуты). Когда вы спрашиваете «действительное число», вы на самом деле имеете в виду формат DD (формат десятичных градусов, например, 13,41 ° N). Таким образом, в DDM координата широта: 15 ° 41,13 N состоит из 3 значений и ссылки:

  • D: градусы, здесь 15
  • M: минуты, здесь 41
  • S: секунды, здесь 13
  • N или S: Север или Юг (по долготе мы имеем Восток или Запад)

Как Википедия говорит , формула для преобразования из DDM в DD:

decimal degrees = degrees + (minutes/60 + seconds/3600)

Я пробовал два онлайн-конвертера ( один и два ), и кажется, что записанные вами координаты находятся в Формат DMM. Единственная разница с форматом DDM заключается в том, что здесь секунды уже разделены на 60, поэтому мы можем перечислить:

  • D: градусы, здесь 15
  • M: минуты, здесь 41
  • S: секунды / 60, здесь 13
  • N или S: север или юг (по долготе у нас Восток или Запад)

Это означает, что формула от цифрового мультиметра до DD:

decimal degrees = degrees + (minutes/60 + seconds/60)

код

import pandas as pd

df_csv = pd.read_csv('file.dat',delimiter=';',encoding='UTF_8')
latitude = df_csv['Latitude'].astype('str')
for element in latitude:
    degree= float(element[:element.find('°')])
    minutes = float(element[(element.find('°')+1):(element.find('.'))])
    seconds= float(element[element.find('.'):])
    decimalDegrees=degree + minutes/60 + seconds/60

вход

Lat: 31°11.7765

выход

31.196275

В ваших координатах вы не говорите ни о каком кардинальном пункте. Правило таково: если это N или E, результат положительный, если S или W, результат отрицательный (-1 * выход)

...