Closed IvanStrakhov closed 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)>
Да, действительно. Я не знал об этой функции: SkyCoord.from_name(s, parse=True). Я заменил свою функцию на вашу, с небольшим дополнением. Оно обусловлено (по крайней мере у меня) неправильным переводом координат (или вообще ошибкой) для случая, например, get_coord_from_string("123.0 12.0") или get_coord_from_string("123 12").
Блоки try catch пересмотрел и сократил.
Исправил
Всё исправил, кроме этого:
get_icrs_coordinates выводит координаты по имени объекта. Моя функция делает совсем другое. Я её немного подправил. Теперь она определяет единицы, в которых пользователь вводит координаты, чтобы пользователю можно было не париться и вводить их в любом из следующих форматов: