# 卫星预测轨道显示功能 ## TL;DR > 锁定卫星时显示绕地球完整一圈的预测轨道轨迹,从当前位置向外渐变消失 ## Context ### 目标 点击锁定卫星 → 显示该卫星绕地球一周的完整预测轨道(而非当前的历史轨迹) ### 当前实现 - `TRAIL_LENGTH = 30` - 历史轨迹点数,每帧 push 当前位置 - 显示最近30帧历史轨迹(类似彗星尾巴) ### 参考: SatelliteMap.space - 锁定时显示预测轨道 - 颜色从当前位置向外渐变消失 - 使用 satellite.js(与本项目相同) ## 实现状态 ### ✅ 已完成 - [x] 计算卫星轨道周期(基于 `meanMotion`) - [x] 生成预测轨道点(10秒采样间隔) - [x] 创建独立预测轨道渲染对象 - [x] 锁定卫星时显示预测轨道 - [x] 解除锁定时隐藏预测轨道 - [x] 颜色渐变:当前位置(亮) → 轨道终点(暗) - [x] 页面隐藏时清除轨迹(防止切回时闪现) ### 🚧 进行中 - [ ] 完整圆环轨道(部分卫星因 SGP4 计算问题使用 fallback 圆形轨道) - [ ] 每颗卫星只显示一条轨道 ## 技术细节 ### 轨道周期计算 ```javascript function calculateOrbitalPeriod(meanMotion) { return 86400 / meanMotion; } ``` ### 预测轨道计算 ```javascript function calculatePredictedOrbit(satellite, periodSeconds, sampleInterval = 10) { const points = []; const samples = Math.ceil(periodSeconds / sampleInterval); const now = new Date(); // Full orbit: from now to now+period for (let i = 0; i <= samples; i++) { const time = new Date(now.getTime() + i * sampleInterval * 1000); const pos = computeSatellitePosition(satellite, time); if (pos) points.push(pos); } // Fallback: 如果真实位置计算点太少,使用圆形 fallback if (points.length < samples * 0.5) { points.length = 0; // ... 圆形轨道生成 } return points; } ``` ### 渲染对象 ```javascript let predictedOrbitLine = null; export function showPredictedOrbit(satellite) { hidePredictedOrbit(); // ... 计算并渲染轨道 } export function hidePredictedOrbit() { if (predictedOrbitLine) { earthObjRef.remove(predictedOrbitLine); predictedOrbitLine.geometry.dispose(); predictedOrbitLine.material.dispose(); predictedOrbitLine = null; } } ``` ## 已知问题 ### 1. TLE 格式问题 `computeSatellitePosition` 使用自行构建的 TLE 格式,对某些卫星返回 null。当前使用 fallback 圆形轨道作为补偿。 ### 2. 多条轨道 部分情况下锁定时会显示多条轨道。需要确保 `hidePredictedOrbit()` 被正确调用。 ## 性能考虑 ### 点数估算 | 卫星类型 | 周期 | 10秒采样 | 点数 | |---------|------|---------|------| | LEO | 90分钟 | 540秒 | ~54点 | | MEO | 12小时 | 4320秒 | ~432点 | | GEO | 24小时 | 8640秒 | ~864点 | ### 优化策略 - 当前方案(~900点 GEO)性能可接受 - 如遇性能问题:GEO 降低采样率到 30秒 ## 验证方案 ### QA Scenarios **Scenario: 锁定 Starlink 卫星显示预测轨道** 1. 打开浏览器,进入 Earth 页面 2. 显示卫星(点击按钮) 3. 点击一颗 Starlink 卫星(低轨道 LEO) 4. 验证:出现黄色预测轨道线,从卫星向外绕行 5. 验证:颜色从亮黄渐变到暗蓝 6. 验证:轨道完整闭环 **Scenario: 锁定 GEO 卫星显示预测轨道** 1. 筛选一颗 GEO 卫星(倾斜角 0-10° 或高轨道) 2. 点击锁定 3. 验证:显示完整 24 小时轨道(或 fallback 圆形轨道) 4. 验证:点数合理(~864点或 fallback) **Scenario: 解除锁定隐藏预测轨道** 1. 锁定一颗卫星,显示预测轨道 2. 点击地球空白处解除锁定 3. 验证:预测轨道消失 **Scenario: 切换页面后轨迹不闪现** 1. 锁定一颗卫星 2. 切换到其他标签页 3. 等待几秒 4. 切回页面 5. 验证:轨迹不突然闪现累积