2014-09-22 2 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가 거짓 인 경우'x가 아닌'을 사용하십시오 : – jfs

답변

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 같은 것으로 고도를 변경하는 경우, 우리는 없음 후면의 목록을 얻을.

내 생각에 neverup은 정의 된 수평선을 고려하지 않고 next_pass가 고려해야합니다.

+0

대단히 감사합니다! 코드를 수정하여 가시성을 올바르게 결정합니다. 'info [0] is not None'과 같은 것을 추가하는 것은 내 애플 리케이션에서 잘 작동하는 것 같다. – mako

관련 문제