2014-09-22 77 views
2

我正在创建一个应用程序来预测卫星可见通行证。 在应用程序中,我使用'if'语句来决定卫星是否可见。pyephem next_pass函数返回不同的结果

如下;

if satellite.neverup is False and satellite.circumpolar is False: 
    observer.next_pass(satellite) 

该计算适用于大多数LEO卫星。 但是,我发现了一些好奇的结果。在satellite.compute(observer)之前和返回不同的值之后使用next_pass函数。

以下代码重现结果。

import ephem 

line_0 = '0 SL-3 R/B' 
line_1 = '1 12904U 81103B 14252.72400340 .00001812 00000-0 13444-3 0 5754' 
line_2 = '2 12904 081.1813 349.2718 0030677 147.5032 212.8569 15.02708918340741' 

target = ephem.readtle(line_0,line_1,line_2) 

site = ephem.Observer() 
site.lon   = '151:43:00' 
site.lat   = '-27:26:00' 
site.elevation = 400 
site.name  = 'test facility' 
site.horizon = '40:00:00' 
site.date = '2014/9/20 00:29:10' 

print ephem.__version__ 

print site.next_pass(target) 

target.compute(site) 

print [target.neverup,target.circumpolar] 

print site.next_pass(target) 

结果如下;

3.7.5.3 
(2014/9/20 01:55:43, 303:49:09.6, 2014/9/20 00:25:02, 30:44:01.7, 2014/9/20 00:30:10, 164:08:09.1) 
[False, False] 
(None, None, None, None, None, None) 

我该如何避免这种结果改变? 我错在哪里?

预先感谢您。

+0

无关:如果不是x:'而不是'if x is False:' – jfs 2014-10-03 07:01:29

回答

2

在玩了一段时间,并使用其他TLE的,我有一个想法是,从来没有不正确占你的视野。也许它使用00:00:00来定义布尔值;如果你改变了地平线30:00:00输出变为:

3.7.5.3 
(2014/9/20 01:55:43, 303:49:09.6, 2014/9/20 00:25:02, 30:44:01.7, 2014/9/20 00:30:10,164:08:09.1) 
[False, False] 
(2014/9/20 12:06:25, 191:15:15.1, 2014/9/20 12:08:23, 82:43:37.8, 2014/9/20 12:10:20, 1:10:09.6) 

为了进一步调试,我们可以在这里显示的下传打印卫星的高度。即

info = site.next_pass(target) 
site.date = info[0] 
target.compute(site) 
print target.alt 

这给:

31:07:31.3 

现在,如果我们改变高度,以类似34:00:00,我们让您无背上的名单。

我的猜测是,从来没有考虑到你的定义的地平线,但next_pass是。

+0

非常感谢!我将修改代码以正确确定可见性。只是添加'info [0]不是None'似乎对我的应用程序正常工作。 – mako 2014-09-24 01:20:08