我在卫星轨道的地球中心惯性坐标(ECI)中有位置(x,y,z)和速度(Vx,Vy,Vz)矢量,最终想要以大地坐标(纬度,经度, & Altitude)。
根据这个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)
答案 0 :(得分:1)
有许多不同的以地心为中心的惯性框架,答案取决于你的坐标是哪一个。
最常见的是所谓的J2000;在2000年1月1日定义为地球的方向。另一个常见的是GCRF,它几乎相同(在80毫秒弧度内)。
如果它是这两者中的任何一个,您应该能够创建一个星座EarthLocation
对象并访问lat
,lon
和height
属性,如此
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)