如何将地球中心惯性(ECI)坐标转换为以地球为中心的地球固定(ECEF)天体运动?其他?

2024-06-01 09:15:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有卫星轨道的地球中心惯性坐标(ECI)中的位置(x,y,z)和速度(Vx,Vy,Vz)向量,最终想得到大地坐标(纬度、经度和高度)。在

根据这一点,other Stack Overflow question我似乎需要转换为以地球为中心的地球固定(ECEF)坐标,作为中间步骤(所以ECI-->;ECEF-->;Lat/Lon/Alt)。在

我知道ECI和ECEF有着相同的原点(地球的质心)和指向北极的相同的z轴。但是,我不知道要将ECI转换为ECEF,需要做哪些实际的方程式或调整。在

否则,如果有人知道在Astropy或类似的东西上有任何隐藏的转换,那就更好了。(我还没有把ECI看作是Astro Py或Space Py的选项)。在

这是我用来生成轨道并得到位置和速度向量的代码。在

from scipy.constants import kilo
import orbital
from orbital import earth, KeplerianElements, Maneuver, plot, utilities
from orbital.utilities import Position, Velocity  
import matplotlib.pyplot as plt
import numpy as np

orbitPineapple = KeplerianElements.with_period(5760, body=earth, 
e=0.05, i=(np.deg2rad(0)), arg_pe=(np.deg2rad(30)))
plot(orbitPineapple)
plt.show()
print(orbitPineapple.r)
print(orbitPineapple.v)

输出: 位置(x=5713846.540659178,y=3298890.8383577876,z=0.0) 速度(x=-3982.305479346745,y=6897.555421488496,z=0.0)


Tags: frompyimportgt地球np中心向量
1条回答
网友
1楼 · 发布于 2024-06-01 09:15:31

有许多不同的地球中心惯性系,答案取决于你的坐标系在哪一个。在

最常见的是所谓的J2000;它是指2000年1月1日地球的方位。另一个常见的是GCRF,它几乎相同(在80毫秒弧秒之内)。在

如果是这两种情况之一,您应该能够创建一个astropy EarthLocation对象并访问latlon和{}属性,如下所示

from astropy import coordinates as coord
from astropy import units as u
from astropy.time import Time
now = Time('2017-09-27 12:22:00')
# position of satellite in GCRS or J20000 ECI:
cartrep = coord.CartesianRepresentation(x=5713846.540659178, 
                                        y=3298890.8383577876,
                                        z=0., unit=u.m)
gcrs = coord.GCRS(cartrep, obstime=now)
itrs = gcrs.transform_to(coord.ITRS(obstime=now))
loc = coord.EarthLocation(*itrs.cartesian.cartrep )
print(loc.lat, loc.lon, loc.height)

相关问题 更多 >