2011-10-05 62 views
9

我對PyEphem模塊給出的有關Observer()查詢的結果以及海拔效果有一個查詢。我從幾個來源(如http://curious.astro.cornell.edu/question.php?number=388)瞭解到,觀察者的海拔高度對日落時間有顯着影響。然而,在下面的代碼,我看到旁邊沒有區別:Observer()的結果似乎沒有考慮到PyEphem中的海拔效應

import ephem 

emphemObj = ephem.Observer() 
emphemObj.date = '2011/08/09' 
emphemObj.lat = '53.4167' 
emphemObj.long = '-3' 
emphemObj.elevation = 0 

ephemResult = ephem.Sun() 
ephemResult.compute(emphemObj) 
print "Sunset time @ 0m: " + str(emphemObj.previous_rising(ephemResult)) 

emphemObj.elevation = 10000 
ephemResult.compute(emphemObj) 
print "Sunset time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

我得到的輸出:

Sunset time @ 0m: 2011/8/8 04:38:34 
Sunset time @ 10000m: 2011/8/8 04:38:34 

我確信我做錯了什麼,而不是這是一個錯誤,但已經嘗試了許多不同的方式,恐怕我會繼續收到相同的結果。有誰知道我在這裏做錯了嗎?

我已經在https://launchpad.net/pyephem上發佈了,但是我沒有迴應。我希望我沒有從根本上誤解海拔函數的目的...

+0

如果您鏈接的文章中複製的例子,在赤道爲12000米,你會得到相同的結果呢?如果是這樣,那麼他們可能還沒有實現高程問題。 – wberry

+0

我不是100%肯定我已經嘗試過12,000米,但我肯定嘗試了其他(更多)更高的值。 previous_rising報告的時間確實發生了變化,這導致我認爲高程代碼正在做某些事情。我只是希望它不是僅僅考慮大氣折射而不是「視界」效應。 – Smingos

回答

6

觀察者的elevation意味着海拔高度的位置 - 例如亞利桑那州弗拉格斯塔夫的海拔高度。但可以推測,不僅觀測者及其望遠鏡或雙筒望遠鏡是海拔這一距離,假定在這個高度上地面以及地平線是也是。所以增加的elevation相對於地平線沒有任何優勢,因爲當你移動到更高海拔的城市時,地平線會隨着你移動。

用鉛筆和紙黃色墊幾分鐘後,它看起來像角降到地平線hza是關係到地球半徑r和你的距地面高度h如上如下:

hza = - acos(r/(h + r)) 

所以從你上面的例子以下的:

import math 
height = 10000 
hza = - math.acos(ephem.earth_radius/(height + ephem.earth_radius)) 
emphemObj.horizon = hza 
print "Sunrise time @ 10000m: " + str(emphemObj.previous_rising(ephemResult)) 

我得到的輸出:

Sunrise time @ 10000m: 2011/8/8 04:08:18 

(請注意,「日出」去與previous_rising()和「日落」去與next_setting()!)

+0

謝謝布蘭登!我花了很多時間試圖找出問題所在,我並沒有停下來想它是否真的有問題。當我考慮它時是有意義的......儘管如此,上面的計算無疑會對我有用,因爲當地有顯着的突出表現。 – Smingos

+0

哦,親愛的,我只是注意到我已經把日期時間標記爲previous_rising了! :-)很高興那個沒有把它變成實際的代碼! – Smingos