如何将地球中心惯性 (ECI) 坐标转换为地球中心地球固定 (ECEF) AstroPy?其他?
How to convert Earth Centered Inertial (ECI) coordinates to Earth Centered Earth Fixed (ECEF) AstroPy? Other?
我在卫星轨道的地心惯性坐标 (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)
有许多不同的地心惯性坐标系,答案取决于您的坐标系在哪个坐标系中。
最常见的是所谓的J2000;定义为 w.r.t 到 2000 年 1 月 1 日地球的方向。另一个常见的是 GCRF,它几乎相同(在 80 毫角秒以内)。
如果是这两者中的任何一个,您应该能够创建一个 astropy 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)
我在卫星轨道的地心惯性坐标 (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)
有许多不同的地心惯性坐标系,答案取决于您的坐标系在哪个坐标系中。
最常见的是所谓的J2000;定义为 w.r.t 到 2000 年 1 月 1 日地球的方向。另一个常见的是 GCRF,它几乎相同(在 80 毫角秒以内)。
如果是这两者中的任何一个,您应该能够创建一个 astropy 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)