Расчет азимута и высоты Python PyEphem

Я новичок в PyEphem и пытаюсь понять, что он может делать и как работает. Поскольку я не хочу использовать его как черный ящик и слепо доверять любой полученной фигуре, я хотел воссоздать пример, который объясняется здесь.

В примере вычисляются азимут и высота объекта для данного наблюдателя 10 августа 1998 г. в 23:10 UT. Приведены следующие параметры:

RA = 16 ч 41,7 мин, DEC = 36 д 28 мин

Широта наблюдателя 52 d 30 мин северной широты и 1 d 55 мин западной долготы.

Правильный ответ согласно примеру (который я могу воссоздать в Excel): AZ = 269,14634 градуса и ALT = 49,169122 градуса.

Я написал следующий код, используя pyephem, чтобы попытаться достичь того же результата:

day = '1998/8/10 23:10:00'
longitude = ephem.degrees('-1.91667')
latitude = ephem.degrees('52.5')

star = ephem.FixedBody()
star._ra = '16:41:42.0'
star._dec = '36:28:00.0'

observer = ephem.Observer()
observer.date = day
observer.lon = longitude
observer.lat = latitude

star.compute(observer)

print 'Observer', observer
print 'RA', star.ra, 'DEC', star.dec
print 'AZ', star.az, 'ALT', star.alt

Запуск программы дает мне такой результат:

>>> 
Observer <ephem.Observer date='1998/8/10 23:10:00' epoch='2000/1/1 12:00:00' lon=-1:55:00.0 lat=52:30:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar>
RA 16:41:39.23 DEC 36:28:33.5
AZ 269:09:54.9 ALT 49:10:57.7

Результаты для AZ + ALT, очевидно, приблизительны к примеру, но далеко не идентичны. Я также озадачен тем фактом, что RA и DEC немного изменены в распечатке по сравнению с тем, что я ввел.

Если кто-нибудь может помочь мне пролить свет на то, почему результаты различаются, и что я могу или должен сделать, чтобы воспроизвести результаты, я был бы очень признателен. Спасибо.

РЕДАКТИРОВАТЬ: исправлена ​​опечатка, указанная в ответе ниже. Вопрос все еще в силе.

EDIT2: хорошо, я прочитал (и вроде как понял), почему PyEphem регулирует прямое восхождение и склонение из этого ссылка. Я не понимаю, есть ли способ заставить PyEphem игнорировать настройку для релятивистского отклонения, нутации и аберрации света таким же образом. что вы можете заставить его игнорировать атмосферную рефракцию? Я предполагаю, что разница в азимуте связана с настройкой RA и DEC, но было бы неплохо подтвердить.


person hgus1294    schedule 04.09.2012    source источник
comment
связанные: Положение солнца в указанное время суток , широта и долгота (реализация на R).   -  person jfs    schedule 04.09.2012


Ответы (3)


Библиотека C, лежащая в основе PyEphem, не имеет никакого способа отключить отклонение, аберрацию или нутацию - возможно, потому, что Природа также не позволяет нам отключать эти эффекты, но я не уверен! Я отмечу, что он не выполняет эти вычисления для спутника на околоземной орбите, но я не могу придумать простой способ для вас установить спутник с точным RA и склонением над вашей позицией, чтобы вы могли спросить PyEphem о его месторасположение.

На самом деле я провожу эту неделю в DjangoCon, чтобы поговорить об API и подумать о том, как PyEphem может когда-нибудь упростить доступ к своей внутренней работе из Python, вместо того, чтобы оставлять все эти интересные шаги заблокированными внутри кода C. Но пока у меня не будет готовой альтернативы, единственный способ добиться того, что вы хотите, - это открыть исходный файл circum.c и закомментировать эти строки:

/* allow for relativistic light bending near the sun */
deflect (mjed, lam, bet, lsn, rsn, 1e10, &ra, &dec);

/* TODO: correction for annual parallax would go here */

/* correct EOD equatoreal for nutation/aberation to form apparent 
 * geocentric
 */
nut_eq(mjed, &ra, &dec);
ab_eq(mjed, lsn, &ra, &dec);

Если эти три вызова - deflect(), nut_eq() и ab_eq(), начинающиеся со строки 263 - закомментированы, то вы можете получить ответ, намного более близкий к тому, который приведен в этой статье. Эти изменения можно применить следующим образом:

  • Загрузка .tar.gz для PyEphem.
  • Распакуйте архив для создания файлов.
  • Внесите правку, которую я предлагаю выше.
  • Запустите python setup.py install, чтобы установить собственную версию программного обеспечения.
  • Попробуйте!

Может быть другое препятствие, если прецессия каким-то образом вступает в игру - в этом случае вам может потребоваться установить эпоху вашего star объекта ровно '1998/8/10 23:10:00', но попробуйте сначала отключить три вызова световых эффектов и посмотрите, приблизит ли это вас !

person Brandon Rhodes    schedule 05.09.2012

Тот факт, что наблюдатель включает «temp = 15,0C, давление = 1010,0 мбар», означает, что в расчет будет включена рефракция. Вы хотите отключить рефракцию

как описано в справке:

Эти видимые положения включают регулировку для имитации атмосферной рефракции для температуры и давления наблюдателя; установите давление наблюдателя на ноль, чтобы игнорировать рефракцию.

person mhoran_psprep    schedule 04.09.2012
comment
Хотя это имеет смысл, на самом деле это не меняет значение рассчитанной AZ. Однако он регулирует высоту до значения, которое находится в пределах погрешности. Есть ли какой-либо подобный параметр, который нужно отрегулировать, чтобы «исправить» азимут? Наблюдатель ‹ephem.Observer date = '1998/8/10 23:10:00' epoch = '2000/1/1 12:00:00' lon = -1: 55: 00.0 широта = 52: 30: 00.0 высота = 0,0 м горизонт = 0: 00: 00,0 температура = 0,0C давление = 0,0 мбар ›RA 16: 41: 39,23 DEC 36: 28: 33,5 AZ 269: 09: 54,9 ALT 49: 10: 08,5 - person hgus1294; 04.09.2012

Вы хотели ввести: RA = 16 ч 41,7 мин.

но вы ввели: star._ra = '16: 41.42.0 '

вместо star._ra = '16: 41: 42.0 '

person mhoran_psprep    schedule 04.09.2012
comment
Хорошо поймал! Глупая опечатка :-). Однако есть расхождения в результатах, так что вопрос остается. я обновлю вопрос. Спасибо - person hgus1294; 04.09.2012
comment
Обратите внимание, что в PyEphem совершенно законно просто оставить десятичную точку на месте и ввести: '16:41.7' в качестве значения. - person Brandon Rhodes; 05.09.2012