как преобразовать градусы, минуты, секунды в десятичные градусы (python/skyfield)

Я хотел бы извлечь координату спутника (ISS) в десятичном формате, используя этот код:

from skyfield.api import EarthSatellite, Topos, load
import time

line1 = '1 25544U 98067A   14020.93268519  .00009878  00000-0  18200-3 0  5082'
line2 = '2 25544  51.6498 109.4756 0003572  55.9686 274.8005 15.49815350868473'

satellite = EarthSatellite(line1, line2, name='ISS (ZARYA)')

while True:
    ts = load.timescale()
    t = ts.now()
    geometry = satellite.at(t)

    subpoint = geometry.subpoint()
    print(subpoint.latitude)
    print('\n')
    print(subpoint.longitude)
    time.sleep(1)

Вывод представляет собой строку: -45deg 44' 13.5".

Как проще всего преобразовать его во что-то вроде: -77.0089°?


person knam    schedule 10.04.2020    source источник
comment
Шаг 1: изолируйте три числа как числа с плавающей запятой, шаг 2: выполните математику.   -  person Klaus D.    schedule 10.04.2020
comment
Добро пожаловать в Stackoverflow! Это платформа, которая поможет вам, когда вы застряли. Пожалуйста, добавьте, что вы пробовали и где вы застряли.   -  person Gangula    schedule 10.04.2020


Ответы (2)


К счастью, объекты latitude и longitude не являются простыми строками, а представляют собой причудливые угловые объекты, которые просто печатаются как строки из трех частей, чтобы их было легко читать на экране. Вы можете узнать о них больше, запросив у Python их документацию. В конце цикла попробуйте добавить:

help(subpoint.latitude)

Документация для класса Angle появится. Вы также можете найти его в Интернете здесь:

https://rhodesmill.org/skyfield/api-units.html#skyfield.units.Angle

Вы захотите использовать атрибут degrees, который выражает угол как число с плавающей запятой. Измените вызовы печати в вашей программе на:

print(subpoint.latitude.degrees)
print('\n')
print(subpoint.longitude.degrees)
person Brandon Rhodes    schedule 10.04.2020

Попробуй это

from skyfield.api import EarthSatellite, Topos, load
import time
line1 = '1 25544U 98067A   14020.93268519  .00009878  00000-0  18200-3 0  5082'
line2 = '2 25544  51.6498 109.4756 0003572  55.9686 274.8005 15.49815350868473'

satellite = EarthSatellite(line1, line2, name='ISS (ZARYA)')

def convert(deg):
  d, m, s = str(deg).replace('deg', '').split(" ")
  ans = float(d) + (float(m.strip("'")) / 60) + (float(s.strip('"')) / 3600)
  return str(ans) + chr(176)

while True:
    ts = load.timescale()
    t = ts.now()
    geometry = satellite.at(t)

    subpoint = geometry.subpoint()
    lat = convert(subpoint.latitude)
    lng = convert(subpoint.longitude)
    print(lat, lng)
    time.sleep(1)

Вывод:

48.522305555555555° 133.80061111111112°
48.49586111111111° 133.89988888888888°
48.46933333333334° 133.99902777777777°
48.44269444444444° 134.09808333333334°
48.416° 134.19702777777778°
person deadshot    schedule 10.04.2020