2016-04-12 92 views
2

如何計算特定日期和時間某站(經度,緯度)處觀測者的恆星位置(ra,dec)?我需要計算所有元素(包括計算中的所有元素(恆星,氣壓和溫度自行運動...)的全座標約簡)座標減少python

我試過用pyephem,但我不確定能不能完成。

import ephem 

polaris = ephem.readdb("Polaris,f|M|F7,2:31:48.704,89:15:50.72,2.02,1") 

polaris.compute('2016/3/1 16:22:56') 

print polaris.a_ra 
print polaris.a_dec 

我也試圖與astroplan,我認爲我更接近的解決方案,但仍然不知道如何還原後得到的座標,並添加適當的運動。

import astropy.units as u 
from astropy.coordinates import EarthLocation 
from astropy.coordinates import SkyCoord 
from pytz import timezone 
from astroplan import Observer 
from astropy.time import Time 
from astroplan import FixedTarget 
import numpy as np 
import astropy.units as u 
from astroplan.plots import plot_sky 
from astroplan.plots import plot_parallactic 
from astroplan.plots import plot_airmass 
import matplotlib.pyplot as plt 
from astroplan import FixedTarget 


longitude = '21d33m20.4s' 
latitude = '+43d08m24.6s' 
elevation = 1150 * u.m 
time = Time('2015-06-16 12:00:00') 

location = EarthLocation.from_geodetic(longitude, latitude, elevation) 

observer = Observer(name='Name', 
       location=location, 
       pressure=0.615 * u.bar, 
       relative_humidity=0.11, 
       temperature=0 * u.deg_C, 
       timezone=timezone('Europe/Belgrade'), 
       description="..") 



coordinates = SkyCoord('2h31m48.704s', '89d15m50.72s', frame = 'icrs') 
polaris = FixedTarget(name='Polaris', coord=coordinates) 

plot_airmass(polaris, observer, time) 

ax = plt.gca() 
box = ax.get_position() 
ax.set_position([box.x0, box.y0, box.width * 0.8, box.height * 0.8]) 

plt.legend(loc=1, bbox_to_anchor=(1.35, 1)) 
plt.show() 
+0

您可能在http://physics.stackexchange.com上獲得了更多成功 - 這個問題似乎更多地是關於物理學而不是計算機編程。 –

+0

或http://astronomy.stackexchange.com/ –

+0

不要忘記添加如下信息:您需要什麼目標精度?你想要幾何或視覺位置?如果精度太高或者物體太近,高度有時也很重要,但對於恆星來說,它應該沒有問題。 – Spektre

回答

1

您可能想嘗試Skyfield,它已經接近1.0的PyEphem的繼任者。雖然PyEphem的底層庫沒有存儲正確的運動,但是如果要應用自己的運動,它必須在輸入過程中移動所有恆星,Skyfield會根據存儲在對象本身中的運動動態地執行運動。您正在考慮將看起來像這樣在Skyfield的減少:

from skyfield.api import load, Star 
ts = load.timescale() 
t = ts.utc(2016, 4, 16, 15, 30) 
planets = load('de421.bsp') 
earth = planets['earth'] 
boston = earth.topos(longitude_degrees=(21, 33, 20.4), 
        latitude_degrees=(+43, 8, 24.6)) 
barnard = Star(ra_hours=(17, 57, 48.49803), 
       dec_degrees=(4, 41, 36.2072), 
       ra_mas_per_year=-798.71, 
       dec_mas_per_year=+10337.77, 
       parallax_mas=545.4, 
       radial_km_per_s=-110.6) 
astrometric = boston.at(t).observe(barnard) 
ra, dec, distance = astrometric.radec() 
print(ra) 
print(dec) 
apparent = astrometric.apparent() 
ra, dec, distance = apparent.radec() 
print(ra) 
print(dec) 
alt, az, distance = apparent.altaz(temperature_C=25.0, 
            pressure_mbar=1013.25) 
print(alt) 
print(az) 

更多文檔是http://rhodesmill.org/skyfield/,如果你是好奇!