1

我要开发的脚本使用来自卫星的笛卡尔坐标 (XYZ),并结合某个位置的距离、仰角和方位角,然后获取卫星的轨道信息并获取该卫星下的地面经度/纬度在给定的时间。

更进一步:想象一颗卫星在海拔 300 公里处穿透大气层发出的信号。在这个高度为 300 公里的特定点,我需要计算地面经度/纬度。

在 pyemph 模块中似乎已经有一种方法(ephem.readtle)可以实现这一点,但仅适用于 TLE(两行元素)数据。我想使用卫星的笛卡尔坐标来开发它。已经有这样的方法了吗?或者也许在这个领域有经验的人可以为我指明正确的方向。

一个类似的问题已经存在于 Azimuth, Elevation, Range 和 Observer Lat,Lon,Alt的 ECEF 中,但这不是同一个问题。

这是我已经开发的: - 卫星笛卡尔坐标,XYZ - 卫星从地面站的方位角、仰角和范围 - 以纬度、经度、海拔高度为单位的地面站坐标

这就是我需要的: - 特定时期卫星下的地面经度/纬度,特别是大气中的穿透点(来自卫星的信号穿透大气层的点)是 300 公里高度。

4

1 回答 1

0

我通过这个找到了我正在寻找的东西:

def ionospheric_pierce_point(self, dphi, dlambda, ele, azi):
    Re = 6378136.3 # Earth ellipsoid in meters
    h = cs.SHELL_HEIGHT * 10**3 # Height of pierce point meters, and where maximum electron density is assumed
    coeff = Re / (Re + h)
    lat_rx = dphi
    long_rx = dlambda

# Degrees to radians conversions
ele_rad = np.deg2rad(ele)
azi_rad = np.deg2rad(azi)
lat_rx_rad = np.deg2rad(lat_rx)
long_rx_rad = np.deg2rad(long_rx)

psi_pp = (np.pi / 2) - ele_rad - np.arcsin(coeff * np.cos(ele_rad)) # Earth central angle between user and the Eart projection of the pierce point, in radians
psi_pp_deg = np.rad2deg(psi_pp)
lat_pp = np.arcsin(np.sin(lat_rx_rad)*np.cos(psi_pp) +
np.cos(lat_rx_rad)*np.sin(psi_pp)*np.cos(azi_rad)) # in radians

if (lat_rx > 70 and ((np.tan(psi_pp)*np.cos(azi_rad)) > np.tan((np.pi/2) - lat_rx_rad))) or (lat_rx < -70 and ((np.tan(psi_pp)*np.cos(azi_rad + np.pi)) > np.tan((np.pi/2) + lat_rx_rad))):
    long_pp = long_rx_rad + np.pi - np.arcsin((np.sin(psi_pp)*np.sin(azi_rad)) / np.cos(lat_pp))
else:
    long_pp = long_rx_rad + np.arcsin((np.sin(psi_pp)*np.sin(azi_rad)) / np.cos(lat_pp))

lat_pp_deg = np.rad2deg(lat_pp)
long_pp_deg = np.rad2deg(long_pp)

return lat_pp_deg, long_pp_deg
于 2016-10-07T11:43:37.273 回答