Python PyEphem计算方位角和海拔高度

时间:2012-09-04 14:56:51

标签: python azimuth altitude pyephem

我是PyEphem的新手,我正在试图弄清楚它能做什么以及它是如何工作的。因为我不想将它用作黑盒子而且盲目地相信我得到的任何数字,我想重新创建一个解释here的例子。

该示例在1998年8月10日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在打印输出中略有修改。

如果有人能帮助我解释为什么结果不同以及我能够或应该做些什么来复制结果,我将非常感激。感谢。

编辑:更正了以下答案中指出的拼写错误。这个问题仍然有效。

EDIT2 :好的,我已经读过(并且有点理解)为什么PyEphem会从这个link调整正确的提升和赤纬。我不明白的是,是否有办法让PyEphem忽略调整相对论偏转章动光的像差同样的方法你可以忽略大气折射吗?我假设Azimuth的差异是由于RA和DEC的调整,但确认很好。

3 个答案:

答案 0 :(得分:2)

观察者包括“temp = 15.0C pressure = 1010.0mBar”的事实意味着计算将包括折射。你想关掉折射

help

中所述
  

这些明显的位置包括模拟大气的调整   折射观察者的温度和压力;设置观察者的   压力为零以忽略折射。

答案 1 :(得分:2)

PyEphem底层的C库没有任何方法可以关闭偏转,畸变或章动 - 也许是因为大自然不会让我们关闭这些效果,但我不确定!我会注意到,对于地球轨道卫星进行那些计算,但是我想不出一个简单的方法让你将卫星置于精确的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行开始 - 被注释掉,那么您可能会得到一个更接近本文中产生的答案的答案。您可以通过以下方式应用这些更改:

  • 为PyEphem下载.tar.gz
  • 提取存档以生成文件。
  • 进行上面建议的编辑。
  • 运行python setup.py install以安装自定义版本的软件。
  • 试一试!

如果岁差在某种程度上发挥作用,可能会有另一个障碍 - 在这种情况下,您可能需要将star对象的时期设置为'1998/8/10 23:10:00' - 但请尝试关闭三盏灯-effect先调用,看看是否能让你更接近!

答案 2 :(得分:1)

您想输入:RA = 16小时41.7分钟

但您输入了:star._ra = '16:41.42.0'

而不是star._ra = '16:41:42.0'