我在做Astropy坐标的转换。但这是不正确的。情况如下,我在J2000中有一个恒星坐标,我想把它转换成实际的时代(或另一个特定的日期)。我正在用星馆提供的坐标验证代码。问题是,在大约20分钟内,结果是不同的,这是一个很大的问题,因为我需要几十毫秒的精度。使用的代码如下:
from astropy.coordinates import SkyCoord
from astropy.coordinates import FK5
c = SkyCoord(20.398617733743833, 38.466348612533892,
unit='deg', frame='icrs')
c_fk5 = c.transform_to(FK5(equinox='2018-10-19 00:19:41'))我想知道我的方法是否错误,以及如何获得更好的结果。请大家自由回答并发表意见和建议。谢谢。
发布于 2018-10-31 05:54:29
你正在混淆春分(经典的正确提升的零点)和时代(当某些东西被观察到时)。另外,FK5是一个古老的天体参考系,它已经被国际遥感卫星所取代,而且这两个框架是非常紧密的,因此在两者之间进行转换是没有意义的。
Astropy使用的是沙发代码的重新实现,该代码实现is 2000/2006决议来计算位置,并使用基于CIO的现代转换。斯泰拉标本馆采用的是较早的春分方法。您可以在用于地球姿态的沙发工具烹饪书的图2中看到这两种方法的不同之处,其中Astropy沿着右边的CIO分支向下,而Stellarium则下降到基于左侧春分的分支。
你可以计算出你想要的东西,即“天空中的哪里是我的目标,在2018年我的时候有这些国际遥感卫星的坐标在J2000.0 -10-19 00:19:41世界协调时”,这将是使用无粘性的天体中间参考系统(CIRS),但这不能与在Stellarium报告的地心视位置相比。这是因为地球极点所在的模型(进动-章动模型)、正确提升的起源和地球自转模式在这两种方法之间是不同的。这使得在图2中的local apparent [h, delta]步骤(对应于HA/Dec (apparent)中的Stellarium)再次遇到这两种方法之前,比较事情变得更加困难。Astropy并没有真正的HA/Dec框架,因为它通常是Alt/Az框架的中间一步,也就是说,对于地球观测者来说,天体向西/东和地平线之上的距离是多少。
下面的代码应该允许您计算一个本地表见HA,12月,以便与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、极地运动等),会有一些差异,但它们应该在次秒级上进行比较。
https://stackoverflow.com/questions/52900678
复制相似问题