1

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

距离这一步更远一步:想象卫星在海拔300公里处穿透大气的信号。在这个高度为300公里的特定时刻,我需要计算地面经度/纬度。

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

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

这里是我已经开发: - 卫星直角坐标系,XYZ - 方位角,仰角和地面站 卫星的范围 - 在纬度,经度,高度地面站坐标,海拔

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

+0

卫星的(SV)坐标在XYZ给出,半径距离地球大约26000公里。地面轨迹是从卫星的XYZ计算出来的。现在想象一下从sv到地面的一条线。我们假设sv在同一条直线上,但是300公里的高度(我们称之为大气穿透点),而不是sv大约为20000(26000负地球半径)。这意味着sv的距离为(300/sin e)km,其中'e'是仰角。我想知道的是这颗卫星位于此范围(地球上空300公里)的地面轨迹。 – pymat

回答

0

我发现我一直在寻找通过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