Наземная долгота / широта под спутником (декартовы координаты) в конкретную эпоху
Скрипт, который я хочу разработать, использует декартовы координаты (XYZ) от спутника, и в сочетании с дальностью, высотой и азимутом от местоположения я затем беру информацию об орбите спутника и получаю долготу / широту относительно этого спутника. в данный момент.
Еще один шаг от этого: вообразите сигнал от спутника, пронизывающего атмосферу точно на 300 км над уровнем моря. В этот конкретный момент, когда высота над уровнем моря составляет 300 км, мне нужно рассчитать долготу / широту земли.
В модуле pyemph, кажется, уже есть метод (ephem.readtle), который может достичь этого, но только для данных TLE (двухстрочный элемент). Я хотел бы использовать декартовы координаты спутника, чтобы развить это. Есть ли такой метод уже там? Или, может быть, кто-то с опытом в этой области может указать мне правильное направление.
Подобный вопрос уже существует в отношении ECEF из азимута, высоты, диапазона и наблюдателя Lat, Lon, Alt, но это не та же проблема.
Вот что я уже разработал: - декартовы координаты спутника, XYZ - азимут, угол места и дальность спутника от наземной станции - координаты наземной станции в широте, долготе, высоте над уровнем моря
Вот что мне нужно: - долгота / широта земли под спутником в определенную эпоху и, в частности, где точка пробивания в атмосфере (точка, через которую сигнал со спутника пронизывает атмосферу) составляет 300 км над уровнем моря.
1 ответ
Я нашел то, что искал через это:
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