Я использую этот код для распространения высоты, но результат не совпадает с реальными данными. Кто-нибудь скажет мне, правильный ли этот код?
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
Верен ли этот распространяемый код высоты? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Оператор Python if не выполняется/верен, несмотря на то, что он явно верен
Anonymous » » в форуме Python - 0 Ответы
- 25 Просмотры
-
Последнее сообщение Anonymous
-