获取未来 24 小时内经过我所在位置的所有卫星列表

问题描述 投票:0回答:1

我试图在某个空间物体经过我的位置时收到警报,因此我的计划是使用 skyfield 通过 find_events 函数生成通过列表(不关心是否可见,没有海拔限制)并存储通过列表时间与卫星信息。所以我有完整的 TLE 跟踪对象列表,我设置了 skyfield,它创建的列表很好......但我注意到,经过大约两个小时的相当一致的传递后,它变得非常稀疏。每隔几分钟,然后就更稀疏了。

所以我的问题是 - 为什么要这样做?有更好的方法吗?

以下是随着一天的推移而存储的通过高潮次数的图表: enter image description here

欣赏任何人可能拥有的任何见解。愿意完全改变我的方法,但也只是对为什么两个小时后通行证变得如此稀疏感到困惑。我当前的解决方案只是每两个小时重新运行一次代码,但其计算量相当大。

相关代码如下:

def next_pass_details(tle_line1, tle_line2, observer_location):
    ts = load.timescale()
    satellite = EarthSatellite(tle_line1, tle_line2)
    observer = Topos(latitude_degrees=observer_location[0], longitude_degrees=observer_location[1])

    start_time = ts.now()
    end_time = start_time + 1.0  # Look 24 hours ahead

    culmination_time = None
    altitude_km = -1 

    times, events = satellite.find_events(observer, start_time, end_time, altitude_degrees=0.0)
    for time, event in zip(times, events):
        if event == 1:  # Culmination
            culmination_time = time
            geocentric = satellite.at(time)
            subpoint = geocentric.subpoint()
            altitude_km = subpoint.elevation.km
            observer_location = (observer.latitude.degrees, observer.longitude.degrees)
            subsatellite_point = (subpoint.latitude.degrees, subpoint.longitude.degrees)
            distance_km = geodesic(observer_location, subsatellite_point).km
            if distance_km > radius: #exclude satellites too far away
                return None
            print(distance_km)

            return {
                'culmination_time': culmination_time.utc_strftime('%Y-%m-%d %H:%M:%S'),
                'altitude_km': altitude_km,
                'distance_km': distance_km
            }
    return None

谢谢

python skyfield
1个回答
0
投票

愚蠢,但错误是我使用 for 循环来返回 pass 事件,因此它只返回每个 TLE 的一个事件并跳过其余事件。

© www.soinside.com 2019 - 2024. All rights reserved.