2012-09-04 150 views
4

我是PyEphem的新手,我試圖弄清楚它可以做什麼以及它是如何工作的。由於我不想用它作爲黑盒,並盲目信任我得到的任何數字,我想重新創建一個解釋爲here的示例。Python PyEphem計算方位角和海拔高度

該示例計算1998年8月10日23:10UT處給定觀察者的物體的方位角和高度。以下參數中給出:

RA = 16小時41.7分鐘,DEC = 36 d 28分鐘

觀察者的緯度是52 d 30分鐘北和經度1 d 55分鐘西。

根據示例(我可以在Excel中重新創建)的正確答案是AZ = 269.14634度和ALT = 49.169122度。

day = '1998/8/10 23:10:00' 
longitude = ephem.degrees('-1.91667') 
latitude = ephem.degrees('52.5') 

star = ephem.FixedBody() 
star._ra = '16:41:42.0' 
star._dec = '36:28:00.0' 

observer = ephem.Observer() 
observer.date = day 
observer.lon = longitude 
observer.lat = latitude 

star.compute(observer) 

print 'Observer', observer 
print 'RA', star.ra, 'DEC', star.dec 
print 'AZ', star.az, 'ALT', star.alt 

運行的程序給我這個輸出:

>>> 
Observer <ephem.Observer date='1998/8/10 23:10:00' epoch='2000/1/1 12:00:00' lon=-1:55:00.0 lat=52:30:00.0 elevation=0.0m horizon=0:00:00.0 temp=15.0C pressure=1010.0mBar> 
RA 16:41:39.23 DEC 36:28:33.5 
AZ 269:09:54.9 ALT 49:10:57.7 

爲AZ + ALT顯然是看球結果

我使用pyephem努力實現同樣的結果寫了下面的代碼到了這個例子,但很不相同。我也對這樣的事實感到困惑,即與我輸入的內容相比,RA和DEC在打印輸出時略有修改。

如果有人能夠幫助我瞭解結果不同的原因以及我可以或應該如何複製結果,我將不勝感激。謝謝。

編輯:更正了以下答案中指出的錯字。這個問題仍然有效。

EDIT2:好的,我已閱讀(並理解)爲什麼赤經和赤緯是由PyEphem從這個link調整的。我不明白的是,如果有什麼辦法讓PyEphem忽略調整相對論偏轉垂頭像差的光同樣的方式,你可以把它忽略大氣折射?我假設方位角的差異是由於RA和DEC的調整,但它確實很好。

+0

相關:[太陽給定時間的位置,經度和緯度](http://stackoverflow.com/questions/8708048/position-of-the-sun-given-time-of-day-latitude-經度)(在R中實現)。 – jfs

回答

2

PyEphem的底層C庫沒有任何方法來關閉偏轉,畸變或章動 - 也許是因爲大自然並不讓我們將這些效果都關閉,但我不確定!我會注意到,它不會爲地球軌道衛星進行這些計算,但我想不出一個簡單的方法讓您將衛星置於一個精確的RA,並且高於您的位置,以便您可以詢問PyEphem它的位置。

我實際上在本週花費在DjangoCon上討論關於API的內容,並考慮PyEphem如何使內部工作更容易從Python訪問,而不是將所有這些有趣的步驟都留在C代碼中。但是,直到我有現成的替代方案,只有這樣才能完成你想要將打開源文件circum.c並註釋掉這些行的內容:

/* allow for relativistic light bending near the sun */ 
deflect (mjed, lam, bet, lsn, rsn, 1e10, &ra, &dec); 

/* TODO: correction for annual parallax would go here */ 

/* correct EOD equatoreal for nutation/aberation to form apparent 
* geocentric 
*/ 
nut_eq(mjed, &ra, &dec); 
ab_eq(mjed, lsn, &ra, &dec); 

如果這三個電話 - deflect()nut_eq()ab_eq()出發在第263行 - 被註釋掉了,那麼你可能會得到更接近本文中產生的答案。您可以通過以下方式應用這些更改:

  • 下載用於PyEphem的.tar.gz
  • 提取存檔以生成文件。
  • 進行上面我建議的編輯。
  • 運行python setup.py install安裝您的定製版本的軟件。
  • 試一試吧!

有可能是另一個障礙,如果進動莫名其妙地開始發揮作用 - 你可能需要將star對象的時代設定準確'1998/8/10 23:10:00'在這種情況下 - 但請嘗試關閉三個光效調用第一和看看是否讓你更接近!

+0

謝謝布蘭登爲您提供翔實和明確的答案。 – hgus1294

1

你想進入:RA = 16小時41.7分鐘

但你輸入:star._ra = '16:41.42.0'

代替star._ra = '16:41:42.0 '

+0

很好,趕上!愚蠢的錯字:-)。結果仍然存在差異,但問題依然存在。我會更新這個問題。謝謝 – hgus1294

+1

請注意,在PyEphem中完全合法的是簡單地保留小數點,並輸入:''16:41.7''作爲值。 –

2

觀察者包括「溫度= 15.0C壓力= 1010.0mBar」的事實意味着計算將包括折射。你想如help描述關閉折射

這些明顯的位置包括調整模擬大氣折射 對於觀察者的溫度和presure;將觀察者的 壓力設置爲零以忽略折射。

+0

雖然這是有道理的,但它實際上並沒有改變爲計算的AZ的值。但是,它會將高度調整爲誤差範圍內的值。是否有任何類似的參數需要調整以「糾正」方位角? Observer RA 16:41:39.23 DEC 36:28:33.5 AZ 269:09:54.9 ALT 49:10:08.5 – hgus1294