2012-09-04 195 views
4

我是PyEphem的新手,我试图弄清楚它可以做什么以及它是如何工作的。由于我不想用它作为黑盒,并盲目信任我得到的任何数字,我想重新创建一个解释为here的示例。Python PyEphem计算方位角和海拔高度

该示例计算1998年8月10日23:10UT处给定观察者的物体的方位角和高度。以下参数中给出:

RA = 16小时41.7分钟,DEC = 36 d 28分钟

观察者的纬度是52 d 30分钟北和经度1 d 55分钟西。

根据示例(我可以在Excel中重新创建)的正确答案是AZ = 269.14634度和ALT = 49.169122度。

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显然是看球结果

我使用pyephem努力实现同样的结果写了下面的代码到了这个例子,但很不相同。我也对这样的事实感到困惑,即与我输入的内容相比,RA和DEC在打印输出时略有修改。

如果有人能够帮助我了解结果不同的原因以及我可以或应该如何复制结果,我将不胜感激。谢谢。

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

EDIT2:好的,我已阅读(并理解)为什么赤经和赤纬是由PyEphem从这个link调整的。我不明白的是,如果有什么办法让PyEphem忽略调整相对论偏转垂头像差的光同样的方式,你可以把它忽略大气折射?我假设方位角的差异是由于RA和DEC的调整,但它确实很好。

+0

相关:[太阳给定时间的位置,经度和纬度](http://stackoverflow.com/questions/8708048/position-of-the-sun-given-time-of-day-latitude-经度)(在R中实现)。 – jfs

回答

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'在这种情况下 - 但请尝试关闭三个光效调用第一和看看是否让你更接近!

+0

谢谢布兰登为您提供翔实和明确的答案。 – hgus1294

1

你想进入:RA = 16小时41.7分钟

但你输入:star._ra = '16:41.42.0'

代替star._ra = '16:41:42.0 '

+0

很好,赶上!愚蠢的错字:-)。结果仍然存在差异,但问题依然存在。我会更新这个问题。谢谢 – hgus1294

+1

请注意,在PyEphem中完全合法的是简单地保留小数点,并输入:''16:41.7''作为值。 –

2

观察者包括“温度= 15.0C压力= 1010.0mBar”的事实意味着计算将包括折射。你想如help描述关闭折射

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

+0

虽然这是有道理的,但它实际上并没有改变为计算的AZ的值。但是,它会将高度调整为误差范围内的值。是否有任何类似的参数需要调整以“纠正”方位角? Observer RA 16:41:39.23 DEC 36:28:33.5 AZ 269:09:54.9 ALT 49:10:08.5 – hgus1294