Как вычислить (alt, az) для заданной галактической координаты (GLON, GLAT) с помощью PyEphem?

Для данного наблюдателя (долгота, широта, время) на Земле и данной галактической координаты (GLON, GLAT), как я могу вычислить соответствующую (высоту, азимут) точку на небе с помощью PyEphem?


person Christoph    schedule 23.06.2012    source источник


Ответы (1)


Учитывая то, как в настоящее время работает PyEphem, есть два шага, чтобы ответить на ваш вопрос. Во-первых, вам нужно преобразовать пару галактических координат в пару экваториальных координат RA/dec.

import ephem

# Convert a Galactic coordinate to RA and dec                          

galactic_center = ephem.Galactic(0, 0)
eq = ephem.Equatorial(galactic_center)
print 'RA:', eq.ra, 'dec:', eq.dec

→ RA: 17:45:37.20 dec: -28:56:10.2

Эти координаты довольно близки к тем, которые дает Википедия для галактического центра.

Теперь, когда у нас есть нормальная координата RA/dec, нам просто нужно выяснить, где она находится в небе прямо сейчас. Поскольку PyEphem построен на основе библиотеки, которая знает только о небесных «телах», таких как звезды и планеты, нам просто нужно создать фальшивую «звезду» в этом месте и узнать ее азимут и высоту.

# So where is that RA and dec above Boston?
# Pretend that a star or other fixed body is there.

body = ephem.FixedBody()
body._ra = eq.ra
body._dec = eq.dec
body._epoch = eq.epoch

obs = ephem.city('Boston')
obs.date = '2012/6/24 02:00' # 10pm EDT
body.compute(obs)
print 'Az:', body.az, 'Alt:', body.alt

→ Az: 149:07:25.6 Alt: 11:48:43.0

И мы можем проверить правильность этого ответа, взглянув на карту звездного неба Бостона поздно вечером: Стрелец — место Галактического Центра — как раз поднимается над юго-восточным краем неба, что прекрасно объясняет юго-восточный азимут, например 149°, а для еще малой высоты 11°.

person Brandon Rhodes    schedule 24.06.2012
comment
Координата (RA,DEC) из PyEphem точно совпадает с той, которую я нашел с помощью конвертер координат HEASARC, возможно, позиция Wikipedia/Galactic_Center предназначена для черная дыра, а не для (ГЛОН,ГЛАТ) = (0,0). - person Christoph; 11.07.2012
comment
Вы можете изменить eq = ephem.Equatorial(galactic_center) на equatorial = ephem.Equatorial(galactic_center), тогда код будет запускаться непосредственно при вставке в оболочку Python. - person Christoph; 11.07.2012
comment
Это решение очень красивое и простое. Единственная странность заключается в том, что вы назначаете приватные атрибуты тела вместо того, чтобы устанавливать значения в конструкторе. - person Christoph; 11.07.2012
comment
Я видел здесь, что конструктору можно отдавать координаты обычным способом python вот так body = ephem.FixedBody(ra=123.123, dec=45.45), но почему-то у меня не работает ни body = ephem.FixedBody(ra=eq.ra, dec=eq.dec), ни body = ephem.FixedBody(ra=eq.ra.real, dec=eq.dec.real), в обоих случаях я получаю body._ra == 0. Это почему? - person Christoph; 11.07.2012