Верен ли этот распространяемый код высоты?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Верен ли этот распространяемый код высоты?

Сообщение Anonymous »

Я использую этот код для распространения высоты, но результат не совпадает с реальными данными. Кто-нибудь скажет мне, правильный ли этот код?
def parse_oem_file(file_path):
with open(file_path, 'r') as file:
lines = file.readlines()
timestamps = []
positions = []
velocities = []

for line in lines:
if line.strip().startswith('20'):
data = line.strip().split()
timestamps.append(Time(data[0]))
positions.append(np.array([float(data[1]), float(data[2]), float(data[3])]) * u.km)
velocities.append(np.array([float(data[4]), float(data[5]), float(data[6])]) * u.km / u.s)
return timestamps, positions, velocities

def calculate_flyover(timestamps, positions, velocities, target_longitude, target_latitude):
location = EarthLocation(lat=target_latitude * u.deg, lon=target_longitude * u.deg, height=0 * u.m)
flyover_data = []

for i, time in enumerate(timestamps):
orbit = Orbit.from_vectors(Earth, positions, velocities, epoch=time)
position = orbit.r
sat_coord = SkyCoord(x=position[0], y=position[1], z=position[2], unit=u.km, representation_type='cartesian')
altaz_frame = AltAz(obstime=time, location=location)
sat_altaz = sat_coord.transform_to(altaz_frame)
azimuth = sat_altaz.az.deg
altitude = sat_altaz.alt.deg

if altitude > 0:
flyover_data.append({
'time': time,
'azimuth': azimuth,
'altitude': altitude
})
if not flyover_data:
print("No flyover detected in the given time range.")
return None

highest_point = max(flyover_data, key=lambda x: x['altitude'])
return {
'start': flyover_data[0]['time'],
'end': flyover_data[-1]['time'],
'highest': highest_point['time'],
'azimuth': highest_point['azimuth'],
'altitude': highest_point['altitude']
}

def run_flyover_calculation(oem_file_path, target_longitude, target_latitude):
timestamps, positions, velocities = parse_oem_file(oem_file_path)
flyover_details = calculate_flyover(timestamps, positions, velocities, target_longitude, target_latitude)
return flyover_details

oem_file = '/data/CSS_OEM_20240927000644_0001.dat'
target_longitude = 100.3
target_latitude = 40.96667
flyover = run_flyover_calculation(oem_file, target_longitude, target_latitude)
if flyover:
print(f"{flyover['highest']}, {flyover['azimuth']}, {flyover['altitude']}")


Подробнее здесь: https://stackoverflow.com/questions/790 ... de-correct
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»