2016-04-12 31 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/,如果你是好奇!