hombit / sai-tasks2019

0 stars 18 forks source link

Любительская навигация #1 #22

Closed IvanStrakhov closed 4 years ago

IvanStrakhov commented 4 years ago

Всё исправил, кроме этого:

Эту всю функцию стоит заменить на что-нибудь готовое из astropy.

get_icrs_coordinates выводит координаты по имени объекта. Моя функция делает совсем другое. Я её немного подправил. Теперь она определяет единицы, в которых пользователь вводит координаты, чтобы пользователю можно было не париться и вводить их в любом из следующих форматов:

hombit commented 4 years ago

Почти все эти комбинации покрываются связкой конструкторов SkyCoord:

def get_coord_from_string(s):
    ...:     try:
    ...:         return SkyCoord(s)
    ...:     except ValueError:
    ...:         return SkyCoord.from_name(s, parse=True)

strings = '''20 54 05.689 +37 01 17.38
    ...: 10:12:45.3 -45:17:50
    ...: 15h17m -11d10m
    ...: 15h17 +89d15
    ...: 275d11m15.6954s +17d59m59.876s
    ...: 12.34567h -17.87654d
    ...: 350.123456d -17.33333d
    ...: 350.123456 -17.33333'''.splitlines()

for s in strings:
    ...:     print(s, get_coord_from_string(s))
    ...:
20 54 05.689 +37 01 17.38 <SkyCoord (ICRS): (ra, dec) in deg
    (313.523705, 37.021495)>
10:12:45.3 -45:17:50 <SkyCoord (ICRS): (ra, dec) in deg
    (153.1889, -45.2973)>
15h17m -11d10m <SkyCoord (ICRS): (ra, dec) in deg
    (229.25, -11.16666667)>
15h17 +89d15 <SkyCoord (ICRS): (ra, dec) in deg
    (229.25, 89.25)>
275d11m15.6954s +17d59m59.876s <SkyCoord (ICRS): (ra, dec) in deg
    (275.18769317, 17.99996556)>
12.34567h -17.87654d <SkyCoord (ICRS): (ra, dec) in deg
    (185.18505, -17.87654)>
350.123456d -17.33333d <SkyCoord (ICRS): (ra, dec) in deg
    (350.123456, -17.33333)>
350.123456 -17.33333 <SkyCoord (ICRS): (ra, dec) in deg
    (350.123456, -17.333333)>
IvanStrakhov commented 4 years ago

Да, действительно. Я не знал об этой функции: SkyCoord.from_name(s, parse=True). Я заменил свою функцию на вашу, с небольшим дополнением. Оно обусловлено (по крайней мере у меня) неправильным переводом координат (или вообще ошибкой) для случая, например, get_coord_from_string("123.0 12.0") или get_coord_from_string("123 12").

Блоки try catch пересмотрел и сократил.

IvanStrakhov commented 4 years ago

Исправил