Python 卫星仰角负值
直到最近,我用来计算某一特定地点卫星的仰角和方位角的代码似乎仍然有效。然后我使用了一个不同的文件,不是在北半球,而是在南半球。计算的仰角有时为负值,即卫星位于地平线以下。这是不正确的,因此用于卫星位置的文件参数为假(可能性较小),或者我下面的代码不正确(可能性较大)Python 卫星仰角负值,python,elevation,orbital-mechanics,satellite-navigation,Python,Elevation,Orbital Mechanics,Satellite Navigation,直到最近,我用来计算某一特定地点卫星的仰角和方位角的代码似乎仍然有效。然后我使用了一个不同的文件,不是在北半球,而是在南半球。计算的仰角有时为负值,即卫星位于地平线以下。这是不正确的,因此用于卫星位置的文件参数为假(可能性较小),或者我下面的代码不正确(可能性较大) rx_位置=(self.X_rx,self.Y_rx,self.Z_rx) 差分位置=卫星坐标-接收位置 差异位置个体=差异位置[0] rho=np.sqrt(不同位置的个体[0]**2+不同位置的个体[1]**2+不同位置的个体[
rx_位置=(self.X_rx,self.Y_rx,self.Z_rx)
差分位置=卫星坐标-接收位置
差异位置个体=差异位置[0]
rho=np.sqrt(不同位置的个体[0]**2+不同位置的个体[1]**2+不同位置的个体[2]**2)
dphi,dlambda,h=自笛卡尔坐标系到大地水准面(rx位置)
板条=np.sin(np.radians(dphi))
slon=np.sin(np.radians(dlambda))
克拉特=np.cos(np.radians(dphi))
clon=np.cos(np.radians(dlambda))
F=np.数组([[-slon,-slat*clon,clat*clon],
[clon,-slat*slon,clat*slon],
[0,clat,slat]]
np.分割(不同位置和个人,3)
局部向量=np.点(F.T,不同位置个体)
E=局部_向量[0]
N=局部_向量[1]
U=局部_向量[2]
水平分布=np.sqrt(E**2+N**2)
如果hor_dis<1e-20:
Azi=0
Ele=90
其他:
Azi=np.rad2deg(数学上的atan2(E,N))
Ele=np.rad2deg(数学atan2(U,hor_dis))
如果Azi<0:
Azi=Azi+360
返回Azi,Ele
如何确保上面的代码最终不会计算负仰角
rx_position = (self.X_rx, self.Y_rx, self.Z_rx)
diff_position = satellite_carteisan_coords - rx_position
diff_position_individual = diff_position[0]
rho = np.sqrt(diff_position_individual[0]**2 + diff_position_individual[1]**2 + diff_position_individual[2]**2)
dphi, dlambda, h = self.cartesian_to_geoid(rx_position)
slat = np.sin(np.radians(dphi))
slon = np.sin(np.radians(dlambda))
clat = np.cos(np.radians(dphi))
clon = np.cos(np.radians(dlambda))
F = np.array([[-slon, -slat*clon, clat*clon],
[clon, -slat*slon, clat*slon],
[0, clat, slat ]])
np.split(diff_position_individual, 3)
local_vector = np.dot(F.T, diff_position_individual)
E = local_vector[0]
N = local_vector[1]
U = local_vector[2]
hor_dis = np.sqrt(E**2 + N**2)
if hor_dis < 1e-20:
Azi = 0
Ele = 90
else:
Azi = np.rad2deg(math.atan2(E, N))
Ele = np.rad2deg(math.atan2(U, hor_dis))
if Azi < 0:
Azi = Azi + 360
return Azi, Ele