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

Gps 特定时期卫星下的地面经度/纬度(笛卡尔坐标),gps,pyephem,satellite,orbital-mechanics,satellite-navigation,Gps,Pyephem,Satellite,Orbital Mechanics,Satellite Navigation,我想开发的脚本使用卫星的笛卡尔坐标(XYZ),结合某个位置的距离、仰角和方位角,然后获取卫星的轨道信息,并获得该卫星在给定时间下的地面经度/纬度 离这更进一步的一步是:imagne从一颗在海拔300公里处穿透大气层的卫星发出的信号。在海拔300公里的这一点上,我需要计算地面经纬度 在pyemph模块中,似乎已经有了一种方法(ephem.readtle)可以实现这一点,但仅适用于TLE(两行元素)数据。我想用卫星的笛卡尔坐标来发展这个。有没有这样的方法?或者是有这方面经验的人 域可以为我指明正确的

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

离这更进一步的一步是:imagne从一颗在海拔300公里处穿透大气层的卫星发出的信号。在海拔300公里的这一点上,我需要计算地面经纬度

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

类似的问题已经存在,但不是同一个问题

以下是我已经开发的内容: -卫星笛卡尔坐标系 -地面站卫星的方位角、仰角和距离 -地面站坐标(纬度、长度、海拔高度)

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

我通过以下途径找到了我要寻找的东西:

def电离层穿透点(self、dphi、dlambda、ele、azi):
Re=6378136.3#地球椭球体,单位为米
h=cs.SHELL_高度*10**3#穿透点米高度,其中假设最大电子密度
系数=Re/(Re+h)
lat_rx=dphi
长_rx=dlambda
#度到弧度的转换
ele_rad=np.deg2rad(ele)
azi_rad=np.deg2rad(azi)
横向rx横向=np.deg2rad(横向rx)
long_rx_rad=np.deg2rad(long_rx)
psi_pp=(np.pi/2)-ele_rad-np.arcin(coeff*np.cos(ele_rad))#用户与穿透点的Eart投影之间的地球中心角,以弧度为单位
psi_pp_deg=np.rad2deg(psi_pp)
横坐标pp=np.Arcin(np.sin(横坐标rx_rad)*np.cos(psi_pp)+
np.cos(纬度x弧度)*np.sin(磅/平方英寸)*np.cos(方位弧度))#
如果(lat_rx>70和((np.tan(psi_pp)*np.cos(azi_rad))>np.tan((np.pi/2)-lat_rx_rad)))或(lat_rx<-70和((np.tan(psi_pp)*np np cos(azi_rad np+np.pi))>np.tan((np.pi/2)+lat rx_rad)):
long_pp=long_rx_rad+np.pi-np.arcin((np.sin(psi_pp)*np.sin(azi_rad))/np.cos(lat_pp))
其他:
long_pp=long_rx_rad+np.arcin((np.sin(psi_pp)*np.sin(azi_rad))/np.cos(lat_pp))
横向pp度=np.rad2deg(横向pp)
long_pp_deg=np.rad2deg(long_pp)
返回横向pp度、纵向pp度

我通过以下途径找到了我想要的东西:

def电离层穿透点(self、dphi、dlambda、ele、azi):
Re=6378136.3#地球椭球体,单位为米
h=cs.SHELL_高度*10**3#穿透点米高度,其中假设最大电子密度
系数=Re/(Re+h)
lat_rx=dphi
长_rx=dlambda
#度到弧度的转换
ele_rad=np.deg2rad(ele)
azi_rad=np.deg2rad(azi)
横向rx横向=np.deg2rad(横向rx)
long_rx_rad=np.deg2rad(long_rx)
psi_pp=(np.pi/2)-ele_rad-np.arcin(coeff*np.cos(ele_rad))#用户与穿透点的Eart投影之间的地球中心角,以弧度为单位
psi_pp_deg=np.rad2deg(psi_pp)
横坐标pp=np.Arcin(np.sin(横坐标rx_rad)*np.cos(psi_pp)+
np.cos(纬度x弧度)*np.sin(磅/平方英寸)*np.cos(方位弧度))#
如果(lat_rx>70和((np.tan(psi_pp)*np.cos(azi_rad))>np.tan((np.pi/2)-lat_rx_rad)))或(lat_rx<-70和((np.tan(psi_pp)*np np cos(azi_rad np+np.pi))>np.tan((np.pi/2)+lat rx_rad)):
long_pp=long_rx_rad+np.pi-np.arcin((np.sin(psi_pp)*np.sin(azi_rad))/np.cos(lat_pp))
其他:
long_pp=long_rx_rad+np.arcin((np.sin(psi_pp)*np.sin(azi_rad))/np.cos(lat_pp))
横向pp度=np.rad2deg(横向pp)
long_pp_deg=np.rad2deg(long_pp)
返回横向pp度、纵向pp度
卫星(sv)坐标以XYZ表示,距离地球约26000公里。地面轨迹由卫星的XYZ计算得出。现在想象一条从sv到地面的线。与sv在这条线上大约20000公里(26000减去地球半径)的距离不同,让我们假设sv在同一条线上,但高度为300公里(我们称之为大气穿透点)。这意味着sv距离(300/sine)km,其中“e”是仰角。我想知道的是这颗卫星在这个距离(离地球300公里)的地面轨道。卫星的(sv)坐标以XYZ表示,距离地球大约26000公里。地面轨迹由卫星的XYZ计算得出。现在想象一条从sv到地面的线。与sv在这条线上大约20000公里(26000减去地球半径)的距离不同,让我们假设sv在同一条线上,但高度为300公里(我们称之为大气穿透点)。这意味着sv距离(300/sine)km,其中“e”是仰角。我想知道的是这颗卫星位于这个距离(离地球300公里)的地面轨道。
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