python 如何将地心惯性(ECI)坐标转换为地心地球固定(ECEF)AstroPy?其他?

8ehkhllq  于 2023-04-04  发布在  Python
关注(0)|答案(1)|浏览(336)

我有卫星轨道的地心惯性坐标(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)

s3fp2yjn

s3fp2yjn1#

有许多不同的地心惯性系,答案取决于你的坐标在哪一个。
最常见的是所谓的J2000;另一个常见的是GCRF,它几乎是相同的(在80毫角秒内)。
如果是这两个中的任何一个,您应该能够创建一个astropy EarthLocation对象,并访问latlonheight属性,如下所示

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)

相关问题