mirror of
https://github.com/silenty4ng/k5sat
synced 2025-01-15 06:52:08 +00:00
74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
from skyfield.api import Topos, load, utc, EarthSatellite
|
||
from datetime import timedelta
|
||
import datetime
|
||
import math
|
||
import pytz
|
||
import ephem
|
||
|
||
def FIND_SATE(line1, line2, satellite_name):
|
||
ts = load.timescale()
|
||
line1 = line1
|
||
line2 = line2
|
||
satellite = EarthSatellite(line1, line2, satellite_name, ts)
|
||
return satellite, 1
|
||
|
||
|
||
def find_lines_after_string(filename, search_string):
|
||
line1 = None
|
||
line2 = None
|
||
with open(filename, 'r') as file:
|
||
lines = file.readlines()
|
||
for i, line in enumerate(lines):
|
||
if search_string in line:
|
||
if i+1 < len(lines):
|
||
line1 = lines[i+1].strip()
|
||
if i+2 < len(lines):
|
||
line2 = lines[i+2].strip()
|
||
break
|
||
return line1, line2
|
||
def CAL_PASS_TIME(target_satellite, observer_lat, observer_lon, observer_elevation):
|
||
topos = Topos(latitude_degrees=observer_lat, longitude_degrees=observer_lon,
|
||
elevation_m=observer_elevation)
|
||
# 获取当前时间并创建Skyfield的时间对象
|
||
now = datetime.datetime.utcnow().replace(tzinfo=utc)
|
||
ts = load.timescale()
|
||
t0 = ts.utc(now)
|
||
t1 = t0 + timedelta(days=2) # 查找2天内过境时间
|
||
passes = target_satellite.find_events(topos, t0, t1)
|
||
# 获取北京时区
|
||
beijing_tz = pytz.timezone('Asia/Shanghai')
|
||
|
||
pass_times = []
|
||
departure_times = []
|
||
if not passes[0]:
|
||
return None, None
|
||
# 打印下一次过境的北京时间和离境时间
|
||
for time, event in zip(passes[0], passes[1]):
|
||
if event == 0: # 0表示升,1表示降
|
||
# 将UTC时间转换为北京时间
|
||
beijing_time = time.utc_datetime().replace(tzinfo=pytz.utc).astimezone(beijing_tz)
|
||
pass_times.append(beijing_time.strftime('%Y-%m-%d %H:%M:%S'))
|
||
elif event == 2:
|
||
departure_time_utc = time.utc_datetime().replace(tzinfo=pytz.utc).astimezone(beijing_tz)
|
||
departure_times.append(departure_time_utc.strftime('%Y-%m-%d %H:%M:%S'))
|
||
|
||
return pass_times, departure_times
|
||
|
||
def CAL_DATA(satellite,line1,line2,observer_lon,observer_lat,observer_elevation,data,UP_HZ,DOWN_HZ):
|
||
|
||
|
||
# 创建观测者对象并设置位置和时间
|
||
observer = ephem.Observer()
|
||
observer.lon = str(observer_lon)
|
||
observer.lat =str( observer_lat)
|
||
observer.elevation = observer_elevation
|
||
observer.date = data # 设置为当前UTC时间
|
||
|
||
satellite.compute(observer)
|
||
# 获取卫星的速度(单位:km/s)
|
||
range_rate = satellite.range_velocity / 1000
|
||
# print("速度:", range_rate, "km/s")
|
||
UP_SHIFT = range_rate / 299792.458 * UP_HZ # 单位:Hz
|
||
DOWN_SHIFT = -range_rate / 299792.458 * DOWN_HZ # 单位:Hz
|
||
DIS = satellite.range / 1000 # 单位从m转换为km
|
||
return round(math.degrees(float(satellite.az)),2), round(math.degrees(float(satellite.alt)),2),round(UP_SHIFT,0),round(DOWN_SHIFT,0),round(DIS,2)
|