2017-07-11 84 views
-2

該腳本應該獲取通過時間,獲取通行時間的角度,然後獲取到達角度的時間。我給出的兩份印刷說明應該給出相同的結果。PyEphem:從太陽時間計算角度,然後從角度計算時間的時間不匹配

import ephem 
obs = ephem.Observer() 
obs.lat = '30' 
obs.long = '30' 
sun = ephem.Sun(obs) 
obs.date = sun.transit_time 

sun.compute(obs) 
altitude = sun.alt 
obs.horizon = altitude 
print(obs.next_setting(ephem.Sun(), use_center = True)) 

相反,這是給我一個NeverUpError。這沒有任何意義。我試着座標20,20。它沒有給出錯誤,但時代不匹配。

Traceback (most recent call last): File "test.py", line 11, in print(obs.next_setting(ephem.Sun(), use_center = True)) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 498, in next_setting return self._riset_helper(body, start, use_center, False, False) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 466, in _riset_helper d0 = visit_transit() File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ephem/init.py", line 410, in visit_transit % (body.name, d)) ephem.NeverUpError: 'Sun' transits below the horizon at 2017/7/12 10:05:39

+0

請分享您使用的實際代碼。錯誤消息引用第15行。您打印變量'transTime',但不會初始化它。這與生成錯誤的代碼不同。 –

+0

@DarenThomas你可以看看我過去的編輯。爲了使它更具可讀性,我縮短了一點,但本質上它是相同的。 – Goldname

+1

您的縮寫使其「更具可讀性」使您的代碼無法正常工作,並且您顯示的錯誤消息不適用於此代碼,即可能會讓人們試圖幫助您。失敗。 – barny

回答

0

第一:跟着看起來是先前的討論,你似乎已經編輯好這個問題的問題到良好的形狀。我可以將它粘貼到一個文件中並運行它並獲得相同的錯誤。

第二:問題可能是您正在尋找稱爲「密切」的情況,使用求解器來設計,而不是找到直交。像next_setting()這樣的程序期望在一天中的某個時刻發現太陽高於地平線,然後一段時間低於地平線,然後在發生轉變的確切時刻縮小。但是,如果我正確地讀取了你的代碼,並且給定了這個設置,那麼永遠不會有太陽出現的時刻「向上」,因爲它不會高於(或多或少)在過境時高於地平線的高度。換句話說,當你設定遠處天空的地平線時,換句話說,你創建PyEphem看起來像沒有日出的日子,所以它明智地向你報告它無法找到日落。

你說你的目標是「得到角度達到的時間」 - 但不是transit_time本身?我不確定我明白爲什麼transit_time還不是您正在尋找的時間。

+0

感謝您的回覆。我有一個函數可以計算基於角度輸入的時間。劇本的主體以一個角度來計算太陽達到那個角度的時間。如果角度超出了太陽的範圍,它使用最大高度的時間(從transit_time計算)作爲輸入,這就是爲什麼我需要從時間 - >角度 - >時間 – Goldname