特定时期卫星下的地面经度/纬度(笛卡尔坐标)

Posted

技术标签:

【中文标题】特定时期卫星下的地面经度/纬度(笛卡尔坐标)【英文标题】:Ground longitude/latitude under a satellite (cartesian coordinates) at a specfic epoch 【发布时间】:2017-01-01 18:25:26 【问题描述】:

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

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

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

类似的问题已经存在referring to ECEF from Azimuth, Elevation, Range and Observer Lat,Lon,Alt,但不是同一个问题。

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

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

【问题讨论】:

卫星的 (sv) 坐标以 XYZ 为单位,距地球的半径约为 26000 公里。地面轨迹是根据卫星的 XYZ 计算得出的。现在想象一条从 sv 到地面的线。而不是 sv 在这条线上大约 20000(26000 减去地球半径)公里,让我们假设 sv 在同一条线上,但高度为 300 公里(我们称之为大气穿透点)。这意味着 sv 的范围为 (300 / sin e) 公里,其中“e”是仰角。我想知道的是这颗卫星的地面轨迹位于这个范围内(地球上方 300 公里)。 【参考方案1】:

我通过this找到了我想要的东西:

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

【讨论】:

以上是关于特定时期卫星下的地面经度/纬度(笛卡尔坐标)的主要内容,如果未能解决你的问题,请参考以下文章

球体表面(经度,纬度)点的凸包

使用从笛卡尔空间和世界文件生成的纬度和经度计算多边形面积

基于笛卡尔坐标点积的算法计算地理距离

经纬度转换成XYZ坐标

如何通过坐标给定的点来识别可变大小的区域?

Cesium坐标系及转换