调整观测者水平属性似乎对地球卫星的上升/设定时间没有影响。此外,我在libastro代码中发现了这一点:
/* we don't implement a minimum horizon altitude cutoff
SiteMinElev = 0;
*/
没有实施地平线截止有什么原因吗?例如,这将有助于进行卫星高程掩蔽。
好消息是:卫星上升和设置不是earthsat.c
的工作,因此您在libastro
作者的源代码中发现的注释并不表明PyEphem缺乏调整地球卫星地平线的能力。如果你对上升和设置例程的工作原理感兴趣,可以在他的riset_cir.c
文件中找到。
坏消息是:你看到的行为是以弗所的一个bug!事实上,虽然PyEphem在运行地球卫星上升和设定计算时确实试图使用观测者的地平线设置,但它把地平线从错误的地方拉了出来。(有关详细信息,请参阅_libastro.c
中的_next_pass()
函数。)它不使用观测者的地平线,而是使用上次在卫星上调用compute()
时的地平线值。
我将把这个bug添加到PyEphem的待办事项列表中。同时,你可以通过首先调用sat.compute(observer)
,然后询问其下一次通过头顶的情况,迫使卫星"看到"你希望它使用的地平线值。这里有一个例子:
import ephem
iss = ephem.readtle(
'ISS (ZARYA)',
'1 25544U 98067A 12286.88755895 .00013766 00000-0 24141-3 0 4559',
'2 25544 51.6478 256.6034 0017425 159.6565 253.2565 15.50708155796305',
)
boston = ephem.city('Boston')
rising_time = boston.next_pass(iss)[0]
print 'Horizon = 0 rising:', rising_time
boston.horizon = '-5'
iss.compute(boston)
rising_time = boston.next_pass(iss)[0]
print 'Horizon = -5 rising:', rising_time
这个脚本应该向你展示一个更早的上升时间,因为我们已经将地平线推到了纯粹的几何地平线之下,事实上我得到了答案;如果你也这样做,请告诉我!
Horizon = 0 rising: 2012/10/13 05:14:28
Horizon = -5 rising: 2012/10/13 05:12:58