PyEphem:值错误:那颗卫星似乎一直在你的地平线以下

2024-09-30 08:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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度的水平面上我应该有结果。在

为什么我会出错?在

谢谢


Tags: datetimetimepasssecondsdegreeselevationhorizonstr
1条回答
网友
1楼 · 发布于 2024-09-30 08:28:19

PyEphem使用的旧的libastro中的上升和设置例程并不是非常持久的-它们最初尝试寻找一个最高的高度,但是如果第一个顶点太低,无法满足您设置的条件,那么它们会引发您看到的错误。我猜搜索程序是在你的列表中找到第一个顶点,最大高度是11°,然后因为它小于45°,它放弃并抛出错误。在

如果您想更详细地了解算法以研究其行为,可以在此处找到它:

https://github.com/brandon-rhodes/pyephem/blob/master/libastro-3.7.7/riset_cir.c#L160

相关问题 更多 >

    热门问题