我正在尝试使用 SkyCoord.transform_to() 功能从 ITRS 转换为以地心 AltAz 框架:
altazCoord = itrsCoord.transform_to(AltAz(obstime=time, location=obsGeoLocation)
遇到的问题是,在 Astropy 4.0 版本下,我们收到的值与 Astropy 5.3.1 版本下不同。根据外部验证器,我们知道 4.0 版本中的值是正确的。我假设5.3.1版本中省略了一些修正或转换的某些部分或被其他函数替换。有人可以建议,与 4.0 版本相比,应该添加什么才能在 astropy 5.3.1 下具有相同的值?
输出示例:
Current values - Astropy version 5.3.1
<SkyCoord (AltAz: obstime=60573.003523216925, location=(4053731.93746628, 1260550.54234471, 4744894.08614764) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0.0, obswl=1.0 micron): (az, alt, distance) in (deg, deg, m)
(169.68730146, 67.35702581, 23624164.67230157)>
Expected correct values - Astropy version 4.0
<SkyCoord (AltAz: obstime=60573.003523216925, location=(4053731.93746628, 1260550.54234471, 4744894.08614764) m, pressure=0.0 hPa, temperature=0.0 deg_C, relative_humidity=0.0, obswl=1.0 micron): (az, alt, distance) in (deg, deg, m)
(169.68410928, 67.35684178, 23624155.6380583)>
编辑1:
可重现的示例: 这是可重现的示例:
from astropy.coordinates import EarthLocation, SkyCoord, AltAz
from astropy.time import Time
import astropy.units as u
time = Time(60573.003523216925, format='mjd', scale='utc')
itrsCoord = SkyCoord(x=23787247.15570922, y=9102499.0451817, z=15098296.92876073, unit='m',
representation_type='cartesian', frame='itrs', obstime=time)
obsGeoLocation = EarthLocation(lat=48.372528 * u.deg, lon=17.2736306 * u.deg, height=536.1 * u.m)
altazCoord = itrsCoord.transform_to(AltAz(obstime=time, location=obsGeoLocation))
print(altazCoord)
今天我用 Astropy==6.1.4 运行代码,结果与 5.3.1 完全相同。
在 AstroPy 4.3.1 下,我得到与 AstroPy 5 和 6 相同的结果。对于 AstroPy 4.2.1,我得到与 AstroPy 4.0 相同的结果。所以改变是在 AstroPy 4.3 中。
检查 AstroPy 4.3 的 发行说明 (*),第一项是
到 AltAz 的转换现在更加精确(并且更快)
以及段落阅读
遵循 M. K. Brewer 的建议并与准确的比较 验证样本,转换的实现 AltAz 坐标变得更加精确(精确到 毫弧秒级)。为了帮助实现这一目标,CIRS 框架获得了 观察者位置属性。
此外,通过确保昂贵的计算 进动章动矩阵仅完成一次,变换 已经大大加快了。
这可能是造成您所看到的差异的原因。如果您 101% 确定用于验证的外部来源,您可能需要使用 AstroPy 提交错误。
(*) AstroPy 网站本身链接到 archive.org;显然,他们并没有将发行说明保留在网站上。可能在他们的 GitHub 存储库中,采用不太可读的格式。