您正在混淆春分(赤经的经典零点)和纪元(观察到某些事物时)。此外,FK5 是已被 ICRS 取代的旧天体参考系,并且这两个框架非常紧密对齐,因此在两者之间进行转换没有意义。
Astropy 使用 ERFA,它是SOFA代码的重新实现,它实现了 IAU2000/2006 分辨率来计算位置,并使用现代基于 CIO 的转换。Stellarium 使用的是旧的基于春分的方法。您可以在SOFA Tools for Earth Attitude Cookbook的图 2 中看到这两种方法之间的区别,其中 Astropy 沿着 CIO 右侧分支,而 Stellarium 沿着左侧基于春分的分支。
您可以计算出您要问的内容,即“我在 2018 年 10 月 19 日 00:19:41 UTC 时间在 J2000.0 具有这些 ICRS 坐标的天体在天空中的哪个位置”,这将是天体中间参考使用天体的系统(CIRS),但这无法与 Stellarium 中报告的地心视位置相媲美。这是因为两种方法的地球极点位置模型(进动章动模型)、赤经起源和地球自转模型不同。这使得比较事物变得更加困难,直到两种方法local apparent [h, delta]在图 2 中的步骤再次相遇(对应于HA/Dec (apparent)在 Stellarium 中)。Astropy 并没有真正具有 HA/Dec 框架这一事实无济于事,因为它通常是 Alt/Az 框架的中间步骤,即物体在地球上的西/东和地平线以上多远 -基于观察者。
下面的代码应该让您计算本地明显的 HA,Dec 以与 Stellarium 进行比较(假设您在 Stellarium 中发送的日期和地点相同)。这将适用于自行和视差可以忽略不计的远处物体;否则,您需要在声明时添加这些SkyCoord- 有关更多详细信息,请参阅使用 SkyCoord的速度。
import astropy.units as u
from astropy.coordinates import SkyCoord, ITRS, EarthLocation
from astropy.time import Time
c = SkyCoord(20.398617733743833, 38.466348612533892, unit='deg', frame='icrs')
t = Time('2018-10-19 00:19:41', scale='utc')
loc = EarthLocation(lon=30*u.deg, lat=30*u.deg, height=0*u.m)
c_ITRS = c.transform_to(ITRS(obstime=t))
# Calculate local apparent Hour Angle (HA), wrap at 0/24h
local_ha = loc.lon - c_ITRS.spherical.lon
local_ha.wrap_at(24*u.hourangle, inplace=True)
# Calculate local apparent Declination
local_dec = c_ITRS.spherical.lat
print("Local apparent HA, Dec={} {}".format(local_ha.to_string(unit=u.hourangle, sep=':'), local_dec.to_string(unit=u.deg, sep=':', alwayssign=True) ))
由于使用的模型不同,考虑到地球方向参数(UT1-UTC,极移)等,会有一些差异,但它们应该在亚秒级进行比较。