Python PyEphem расчет азимута и высоты
Я новичок в PyEphem, и я пытаюсь выяснить, что он может сделать и как он работает. Поскольку я не хочу использовать его в качестве черного ящика и слепо доверяю любой фигуре, которую я получаю, я хотел воссоздать пример, который объясняется здесь.
В этом примере вычисляется азимут и высота объекта для данного наблюдателя 10 августа 1998 года в 23:10 UT. Даны следующие параметры:
RA = 16 ч 41,7 мин, DEC = 36 д 28 мин
Широта наблюдателя 52 д 30 мин северной широты и 1 д 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 немного изменены в распечатке по сравнению с тем, что я ввел.
Если кто-то может помочь мне пролить свет на то, почему результаты отличаются, и что я могу или должен сделать, чтобы воспроизвести результаты, я был бы очень признателен. Благодарю.
РЕДАКТИРОВАТЬ: Исправлена опечатка, указанная в ответе ниже. Вопрос все еще актуален.
РЕДАКТИРОВАТЬ 2: Хорошо, я прочитал (и вроде понял), почему правильное восхождение и склонение регулируется PyEphem из этой ссылки. Что я не понимаю, так это то, что есть ли способ заставить PyEphem игнорировать настройку релятивистского отклонения, нутации и аберрации света так же, как вы можете заставить его игнорировать атмосферную рефракцию? Я предполагаю, что разница в азимуте связана с корректировкой RA и DEC, но было бы неплохо подтвердить.
3 ответа
Библиотека C, лежащая в основе PyEphem, не имеет никакого способа отключить отклонение, аберрацию или нутацию - возможно, потому, что Nature также не позволяет отключить эти эффекты, но я не уверен! Я отмечу, что он не выполняет эти расчеты для спутника на околоземной орбите, но я не могу придумать, как вам легко установить спутник с точным значением 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'
в этом случае - но попробуйте сначала отключить три звонка с световыми эффектами и посмотрите, приблизит ли это вас!
Тот факт, что наблюдатель включает "temp=15.0C давление =1010.0mBar", подразумевает, что расчет будет включать в себя преломление. Вы хотите отключить рефракцию
как описано в справке:
Эти очевидные положения включают в себя настройку для имитации атмосферной рефракции для температуры и давления наблюдателя; установите давление наблюдателя на ноль, чтобы игнорировать рефракцию.
Вы хотели ввести: RA = 16 ч 41,7 мин
но вы ввели: star._ra = '16:41.42.0'
вместо star._ra = '16:41:42.0'