如何用Astropy将J2000坐标转换为经纬度与海拔?代码异常排查
ISS轨迹坐标转换异常问题解决
问题根源
- 单位匹配错误:NASA提供的ISS轨迹XYZ坐标单位为千米,但代码中指定了
u.m作为单位,导致坐标数值被缩小1000倍,计算出的高度为负数(相当于位置在地球内部)。 - 时间参数影响被掩盖:单位错误导致位置结果完全偏离实际,使得时间参数对框架转换的影响无法体现。
修正方案
将坐标单位改为u.km,或把原始坐标数值乘以1000后使用u.m,同时保持时间参数的正确传递。
修正后的代码
from astropy import coordinates as coord from astropy import units as u from astropy.time import Time now = Time("2024-03-07 00:46:00.000", scale='utc') # 注意:原始数据单位为千米,这里指定正确单位 xyz = [1155.746046202530, -6632.420367726780, 953.533229633281] cartrep = coord.CartesianRepresentation(*xyz, unit=u.km) gcrs = coord.GCRS(cartrep, obstime=now) itrs = gcrs.transform_to(coord.ITRS(obstime=now)) loc = coord.EarthLocation(*itrs.cartesian.xyz) print(loc.lat, loc.lon, loc.height)
预期结果
修正后计算出的高度会接近500km,且修改obstime参数时,经纬度结果会随地球自转发生明显变化,符合J2000框架(GCRS)到地固系(ITRS)的转换逻辑。
内容的提问来源于stack exchange,提问作者TheForWarden
相关产品推荐
相关产品推荐

