如何使用Astropy将坐标从J2000转换为纬度、经度和高度
我按照这个网站上关于这个问题的提问中的说明进行了操作,但代码似乎都有问题。首先,海拔高度看起来太低了,而且我设置的时间似乎对位置没有太大影响,而我理解的J2000坐标系是和时间有关的。
这是我在VSCODE中运行的代码:
from astropy import coordinates as coord
from astropy import units as u
from astropy import time
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.m)
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)
这个代码返回的结果是-1d21m45.24750203s 103d26m20.83691865s -6371417.547754194 m,我不确定这个结果是否正确。海拔高度离地面太近了,应该高出大约500公里。而且时间似乎对结果的影响也不大。这些坐标和时间都是基于国际空间站的轨迹数据,来源于:https://spotthestation.nasa.gov/trajectory_data.cfm
1 个回答
0
你的单位不对,应该是公里:
cartrep = coord.CartesianRepresentation(*xyz, unit=u.km)
这样会给你:
8d07m57.90049783s 103d26m20.84968463s 421.84457018512904 km
在这个链接的网页上,有关于轨道数据的说明(我强调一下):
在标题之后,国际空间站的状态向量以J2000(J2K)参考框架列出,间隔四分钟,总共持续15天。在进行轨道提升(调整轨道)时,状态向量以两秒的间隔报告。每个状态向量会列出UTC时间;位置的X、Y和Z坐标以公里为单位;以及速度的X、Y和Z坐标以公里每秒为单位。
真正的问题是,你是从哪里得到2024年3月7日00:46:00.000的数据的?我只能看到那天午夜过44分钟和48分钟的时间戳的数据。而且看了X、Y、Z的数据后,进行一些猜测和插值,我得到的输入值和你在午夜46分钟的时间戳上并不接近。