我对PyEphem库有问题。在
简言之,我必须根据TLE计算卫星对不同观察者的通过,因为他们必须与之通信。但是为了确保他们能够与卫星通信,他们可以指定他们想要的最小仰角。在
我用的是盖伊。地平线我想要一个精确的仰角。在
这是我的密码
def test_ephem_horizon():
str1 = 'SWISSCUBE'
str2 = '1 35932U 09051B 15278.30192626 .00000528 00000-0 13209-3 0 9992'
str3 = '2 35932 98.4206 37.8361 0007688 9.6843 350.4501 14.55537404319986'
#satellite
swisscube = ephem.readtle(str1, str2, str3)
#observer
guy = ephem.Observer()
guy.lon, guy.lat = '18.6107', '53.0217'
guy.date = datetime.datetime.now()
print "datetime.now(): " , guy.date
##################################### FIRST CASE #####################################################
degrees=10
minutes=0
seconds=0
elevation_angle_str = str(degrees) + ':' + str(minutes) + ':' + str(seconds)
guy.horizon = elevation_angle_str
swisscube.compute(guy)
passes = []
passes.append(passListToDic(guy.next_pass(swisscube)))
nb_passes = 30
for i in range(0, nb_passes):
guy.date = passes[i]['set_time'].datetime() + datetime.timedelta(hours=0, minutes=1)
temp_pass = guy.next_pass(swisscube)
print 'horizon: ', guy.horizon, ' passe[', i, ']: ', passes[i]
passes.append(passListToDic(temp_pass))
##################################### SECOND CASE #####################################################
degrees=45
minutes=0
seconds=0
elevation_angle_str = str(degrees) + ':' + str(minutes) + ':' + str(seconds)
guy.horizon = elevation_angle_str
swisscube.compute(guy)
passes = []
passes.append(passListToDic(guy.next_pass(swisscube)))
elevation_angle_str = str(degrees) + ':' + str(minutes) + ':' + str(seconds)
nb_passes = 30
for i in range(0, nb_passes):
guy.date = passes[i]['set_time'].datetime() + datetime.timedelta(hours=0, minutes=1)
temp_pass = guy.next_pass(swisscube)
print 'horizon: ', guy.horizon, ' passe[', i, ']: ', passes[i]
passes.append(passListToDic(temp_pass))
return passes
def passListToDic(_pass):
return {'rise_time': _pass[0], 'rise_azimuth': _pass[1], 'max_alt_time': _pass[2],
'max_alt': _pass[3], 'set_time': _pass[4], 'set_azimuth': _pass[5]}
if __name__ == '__main__':
test_ephem_horizon()
测试结果如下:
^{pr2}$当我使用10度的地平线时,它的功能非常好,但如果我使用的是39度以上的地平线,则会出现以下错误:
ValueError: that satellite seems to stay always below your horizon
但正如你在结果中所看到的,我们有很多次通过的地方,最高海拔在45度以上。所以正常情况下,卫星在45度的水平面上我应该有结果。在
为什么我会出错?在
谢谢
PyEphem使用的旧的
libastro
中的上升和设置例程并不是非常持久的-它们最初尝试寻找一个最高的高度,但是如果第一个顶点太低,无法满足您设置的条件,那么它们会引发您看到的错误。我猜搜索程序是在你的列表中找到第一个顶点,最大高度是11°,然后因为它小于45°,它放弃并抛出错误。在如果您想更详细地了解算法以研究其行为,可以在此处找到它:
https://github.com/brandon-rhodes/pyephem/blob/master/libastro-3.7.7/riset_cir.c#L160
相关问题 更多 >
编程相关推荐