SpaceDt卫星轨道可视化与空间态势感知平台
基于 Cesium + Vue 3 + KeepTrack API v4 的卫星轨道实时可视化与空间态势感知平台
项目概述
SpaceDt 是一个功能完整的卫星轨道可视化与空间态势感知平台,集成了 TLE 数据解析、开普勒轨道传播、三维地球渲染、传感器覆盖分析、星地链路仿真、全坐标系转换、卫星编目监控、交会预警、发射预告、空间指标驾驶舱、文本数据导出等 8 大核心模块,适用于卫星轨道设计、任务规划与态势展示场景。
TLE 数据解析

卫星运行仿真

通信链路视窗

坐标转换

空间态势感知

发射预告

空间指标

文本数据

技术栈
| 分类 | 技术 |
|---|---|
| 前端框架 | Vue 3 (Composition API) |
| 三维引擎 | Cesium 1.126+ |
| UI 组件库 | Element Plus |
| 路由 | vue-router 4 |
| 语言 | TypeScript 5.7 |
| 构建工具 | Vite 6 |
| 轨道计算 | satellite.js / ootk v6 / 自研开普勒解算器 |
| 数据源 | KeepTrack Space API v4 (2000次/小时免费配额) |
| 3D 模型 | glTF 2.0 (weixing.gltf / dish.gltf) |
快速开始
▼bash复制代码# 安装依赖 npm install # 启动开发服务器 npm run dev # 生产构建 npm run build
启动后访问 http://localhost:5173,通过顶部导航栏切换八个功能模块:TLE 数据平台、卫星运行仿真、通信链路视窗、坐标转换、空间态势感知、发射预告、空间指标、文本数据。
功能模块
一、TLE 数据平台 (/tle)
负责卫星 TLE 数据的管理、解析与轨道可视化。
1. TLE 数据源
| 数据来源 | 说明 |
|---|---|
| Celestrak | 按卫星分组(空间站、气象、科学等)一键拉取实时 TLE |
| Space-Track.org | 支持账号登录,按 NORAD ID 或分类查询历史 TLE |
| 文件上传 | 支持.tle / .txt 格式本地文件上传 |
| 手动粘贴 | 粘贴标准三行 TLE 格式(名称 / Line1 / Line2) |
| 内置示例 | 预置 ISS、NOAA-19 等常用卫星 TLE 数据 |
2. 轨道可视化
- 基于 SGP4 传播算法,实时计算卫星在轨位置
- Cesium 三维地球上渲染轨道弧线
- 卫星列表支持选中高亮与视角跟踪
- 轨道参数面板展示 TLE 7 参数(倾角、升交点赤经、偏心率等)
3. 碰撞检测
- 支持两两卫星间的最小距离计算
- 碰撞概率评估与预警显示
二、卫星运行仿真 (/simulation)
完整的多卫星轨道动力学仿真与传感器覆盖分析演示。
1. 卫星轨道与运动仿真
系统预置四颗卫星,每颗具有独立轨道与可视化配置:
| 卫星 | 半长轴 (km) | 倾角 | 偏心率 | 轨道颜色 | 特殊功能 |
|---|---|---|---|---|---|
| 卫星1号 | 9678.145 | 20° | 0.1 | 黄色 | 近地点/远地点标记 |
| 卫星2号 | 9678.145 | 60° | 0.0 | 蓝色 | 多层金字塔传感器(8层叠加) |
| 卫星3号 | 10878.145 | 40° | 0.2 | 红色 | 星下点轨迹 + 卫星垂线 |
| 卫星4号 | 10078.145 | 80° | 0.05 | 绿色 | 单层金字塔传感器 |
- 所有卫星使用 weixing.gltf 3D 模型可视化
- 基于开普勒轨道六要素的二体问题实时解算
- 统一 ECI(地心惯性)坐标系,卫星与轨道线精确对齐
2. 传感器与载荷仿真
| 类型 | 搭载卫星 | 参数 | 效果 |
|---|---|---|---|
| 锥形传感器 | 1号、3号 | 半角 15°,高度 4000km | 青色线框 + 半透明锥形填充(CylinderGraphics) |
| 金字塔传感器 | 2号 | x/y 角 15°,高度 4000km | 8层叠加线框,渐进透明度动画 |
| 金字塔传感器 | 4号 | x/y 角 15°,高度 3000km | 单层线框 + 锥形填充 |
传感器覆盖区域使用红色半透明填充,直观展示瞬时对地覆盖范围。
3. 星地链路与通信仿真
- 地面站:郑州站 (113.65°E, 34.76°N),使用 dish.gltf 3D 雷达天线模型
- 星地链路:地面站到每颗卫星的动态联通线,带流动箭头动画效果
- 距离触发机制:每 50ms 计算星地距离,距离 < 2000km 时链路连通,传感器同时变为可见
- 监测区域:红色半透明椭圆(半径 2000km),标识地面站监测覆盖范围
- 雷达扫描:黄色旋转扇形波束动画,模拟雷达扫描效果
4. 轨道特殊标记
- 近地点/远地点:品红色/黄色圆点标记,带文字标签(卫星1号)
- 星下点轨迹:卫星在地表的投影轨迹线(卫星3号)
- 卫星垂线:从卫星到地表的虚线连接(卫星3号)
- 地球经纬网格:每 30° 间隔的经线和纬线,白色半透明
5. 仿真时间控制
- Cesium 内置时间轴 + 动画控制器
- 默认 60 倍速播放,支持暂停/快进/回退
- 回到当前时刻:一键重置仿真时间至真实当前时刻
- 3 天循环时长,支持长时间轨道推演
6. 相机信息实时显示
画面底部状态栏实时输出观测视角参数:
| 参数 | 说明 |
|---|---|
| 视点高度 | 相机离地距离(KM) |
| 偏航角 | 水平旋转方位(°) |
| 俯仰角 | 上下俯仰角度(°) |
| 翻滚角 | 画面倾斜角度(°) |
| 海拔高度 | 相机海拔(M) |
| 经度/纬度 | 相机焦点地表坐标(度分秒格式) |
三、通信链路视窗 (/link)
专用于卫星与地面站之间通信链路的实时监控与链路预算分析,为星地通信系统设计提供可视化的链路质量评估。
1. 实时链路监控
系统同时监控四颗卫星与郑州地面站的通信链路状态,每张卫星卡片实时展示:
| 指标 | 说明 |
|---|---|
| 星地斜距 | 卫星到地面站的直线距离,支持 km / 千km 自动单位切换 |
| 传播延迟 | 电磁波信号从卫星到地面站的单向传播时间(ms) |
| 天线指向角 | 地面站天线方位角(0-360°)与仰角,低仰角时黄色警告 |
| 多普勒频移 | 卫星相对运动引起的频率偏移(kHz),靠近蓝色、远离红色 |
| 通信窗口 | 当前连通剩余时长倒计时 / 下次进入窗口预估等待时间 |
2. 链路预算分析
基于标准链路预算模型,实时计算并展示星地通信链路的电性能参数:
| 参数 | 说明 |
|---|---|
| 自由空间损耗 | FSPL = 20log(d) + 20log(f) + 92.45(dB) |
| 接收功率 | Pr = Pt + Gt + Gr - FSPL - Lother(dBm) |
| 信噪比 SNR | SNR = Pr - 10log(kTB) + 30(dB),带柱状图可视化 |
链路参数(载波频率、发射功率、噪声温度、带宽)支持面板内实时调整,所有计算即时响应。
3. 3D 可视化
- 右侧 Cesium 视图聚焦郑州地面站,展示四颗卫星的轨道线与实时位置
- 通信链路连接线动态变色:绿色 = 连通,灰色 = 断开
- 黄色 2000km 监测圈标识地面站覆盖范围
- 协议栈图例(连通 / 断开 / 地面站)
四、坐标转换 (/coordinate)
基于 ootk v6 航天动力学库的全坐标系转换工具,覆盖 13 种坐标类型的任意双向互转。
坐标系分类
| 类别 | 坐标系 |
|---|---|
| 核心帧 | TEME、J2000 (ECI)、ITRF (ECEF) |
| 轨道根数 | 经典开普勒六根数、春分点根数(无奇点) |
| 相对坐标 | Hill (CW 方程)、RIC(径向/沿迹/法向) |
| 观测坐标 | Geodetic (LLA)、RAE(斜距/方位/仰角)、地心 & 站心 RA/Dec |
| 姿态表示 | 欧拉角 (Roll/Pitch/Yaw)、四元数 |
核心特性
- J2000 万能中间帧:所有坐标系先转到 J2000 再转到目标,避免 156 个转换函数
- 智能输入适配:根据源坐标系自动切换输入字段(笛卡尔 / 六根数 / 球坐标等)
- 欧拉角 ↔ 四元数互转:基于方向余弦矩阵(DCM)的 trace 分支算法,处理万向节锁退化
- 历元时间选择器,支持验证不同时刻的转换结果
五、空间态势感知 (/ssa)
对接 KeepTrack Space API v4,将真实卫星编目数据注入 Cesium 三维地球的全景式 SSA 平台。
核心特性
- 卫星编目:11 种数据源(全部活动卫星 / LEO / GEO / 碎片 / CelesTrak / SatNOGS 等),500+ 卫星实时 SGP4 传播渲染
- 轨道分类着色:LEO 蓝 / GEO 绿 / 碎片灰 / 其他橙,数据源限定类型时统一着色
- SOCRATES 交会预警:碰撞概率四级分级(严重 ≥1e-3 / 高 / 中 / 低),5 分钟自动刷新
- 地面站过境预测:6 个预设测控站点,金色标记与过境弧线可视化
- 三面板可折叠:编目 / 过境 / 交会面板独立折叠,最大化 Cesium 视图
- API 限流保护:冷却计时 + 5 分钟缓存 + 401/403 自动提示重输 Key
六、发射预告 (/launches)
全球火箭发射计划的卡片式浏览与详情追踪,覆盖"发射前"信息维度。
核心特性
- 卡片网格列表:自适应
auto-fill, minmax(340px, 1fr)布局,展示发射名称、时间、火箭、发射场 - 状态标记:Go/Confirmed 绿色、Delayed/TBD 黄色、其余蓝色
- 发射详情页 (
/launches/:id):发射任务图片、倒计时、任务信息、火箭参数、发射工位列表 - 火箭参数查询:通过
/v4/launch-vehicle/{name}获取火箭描述与关联工位
七、空间指标 (/metrics)
空间目标数据驾驶舱,9 个 API 端点并行请求,展示宏观统计全景。
核心特性
- API 健康状态:D1/R2 数据库状态、活跃/在轨/再入/总卫星数、平均 TLE 龄期
- 四大指标计数:活跃载荷 / 非活跃载荷 / 总载荷 / 碎片数量,大号数字 + 彩色边框
- TLE 龄期统计:摘要(总数/均值/中位/最值)+ CSS 直方图 + 未来 TLE 警告
- 最近发射卫星:近 30 天发射清单,NORAD ID / 名称 / 国际编号 / 国家
- 热门卫星排行:近 7 天查询次数 TOP,反映社区关注焦点
- API 用量统计:总请求 / 独立 IP / 按端点 TOP / 按国家 TOP
- 独立容错:
Promise.allSettled确保任一接口失败不影响其他面板
八、文本数据 (/text-data)
卫星编目数据的管道分隔 CSV 查询、浏览与一键导出。
核心特性
- 三维筛选器:对象类型(PAYLOAD/ROCKET_BODY/DEBRIS/UNKNOWN)× 国家代码 × 卫星名称
- 国家代码映射:API 优先获取 + 本地 38 国兜底列表
- 管道分隔 CSV 解析:按
|分列、按\n分行,自动补齐尾部空列 - 等宽字体表格:Consolas/Monaco 渲染,
show-overflow-tooltip超长截断 - 一键下载 CSV:时间戳文件名,Blob 方式触发浏览器下载
- 性能保护:
displayLimit = 500限制渲染行数
项目结构
▼text复制代码tlePlus/ ├── public/ │ ├── gltf/ # 3D 模型资源 │ │ ├── weixing.gltf # 卫星模型 │ │ └── dish.gltf # 地面站雷达天线模型 │ └── textures/ # 地球纹理贴图 ├── src/ │ ├── components/ │ │ ├── ssa/ # 空间态势感知子组件 │ │ │ ├── ConjunctionPanel.vue # 交会预警面板 │ │ │ ├── GroundStationPanel.vue # 地面站与过境面板 │ │ │ ├── LaunchesPanel.vue # 发射面板(预留) │ │ │ ├── SatelliteCatalogPanel.vue # 卫星编目列表 │ │ │ └── SsaGlobe.vue # SSA Cesium 三维地球 │ │ ├── SatelliteTLEViewer.vue # TLE 数据平台(/tle) │ │ ├── SatelliteSimulation.vue # 卫星运行仿真(/simulation) │ │ ├── CommunicationLinkViewer.vue # 通信链路视窗(/link) │ │ └── CoordinateConverter.vue # 坐标转换工具(/coordinate) │ ├── views/ │ │ ├── SpaceSsa.vue # 空间态势感知主页面(/ssa) │ │ ├── LaunchMonitor.vue # 发射预告列表(/launches) │ │ ├── LaunchDetail.vue # 发射详情页(/launches/:id) │ │ ├── MetricsDashboard.vue # 空间指标面板(/metrics) │ │ └── TextDataViewer.vue # 文本数据查询(/text-data) │ ├── router/ │ │ └── index.ts # 路由配置(8 模块路由) │ ├── utils/ │ │ ├── keplerOrbit.ts # 开普勒轨道计算引擎 │ │ ├── tleCalculator.ts # TLE/SGP4 轨道传播 │ │ ├── tleParser.ts # TLE 数据解析器 │ │ ├── orbitPropagator.ts # 轨道传播与轨迹生成 │ │ ├── collisionCalculator.ts # 碰撞概率计算 │ │ ├── conjunctionAnalyzer.ts # 交会事件风险分级 │ │ ├── sensorGeometry.ts # 传感器几何计算 │ │ ├── linkBudget.ts # 链路预算计算工具 │ │ ├── coordinateConverter.ts # 全坐标系转换引擎(13种) │ │ └── keepTrackApi.ts # KeepTrack API v4 客户端 │ ├── types/ │ │ ├── tle.ts # TLE 数据类型定义 │ │ ├── collision.ts # 碰撞检测类型定义 │ │ └── ssa.ts # SSA 空间态势感知类型定义 │ ├── data/ │ │ └── sampleTle.ts # 内置 TLE 示例数据 │ ├── App.vue # 根组件(8 模块全局导航 + 路由视图) │ └── main.ts # 应用入口 ├── package.json ├── vite.config.ts └── tsconfig.json
轨道计算引擎
- 基于开普勒轨道六要素(半长轴、偏心率、倾角、升交点赤经、近地点幅角、平近点角)
- 牛顿迭代法求解开普勒方程
M = E - e·sin(E) - 支持高偏心率轨道(e > 0.8 使用改进初始猜测)
- 3-1-3 旋转矩阵(Rz(Ω) · Rx(i) · Rz(ω))将轨道面坐标转换到 ECI
- SGP4/SDP4 轨道传播(satellite.js),兼容 TLE 数据格式
坐标转换系统
- 基于 ootk v6 航天动力学库,覆盖 TEME/J2000/ITRF 等 13 种坐标系
- J2000 万能中间帧架构,避免 (13 \times 12 = 156) 个转换函数
- 欧拉角 ↔ 四元数 DCM 互转,trace 分支算法处理万向节锁退化
- 完整处理岁差、章动、GMST 旋转、极移等地球定向参数
坐标系统
- 统一使用 ECI(地心惯性坐标系) 渲染卫星、轨道、传感器
- 地面站使用 ECF(地球固定坐标系)的经纬度定位
- 链路连线跨坐标系自动桥接
3D 渲染
- 卫星/地面站使用 glTF 2.0 模型渲染
- 传感器线框使用 CallbackProperty 实现每帧实时更新
- 锥形填充使用 CylinderGraphics(topRadius=0)创建锥体
- 链路动画使用 PolylineArrowMaterialProperty 方向箭头
- 雷达扫描使用 PolygonGraphics + CallbackProperty 旋转多边形
- 动态 polyline 颜色使用 ColorMaterialProperty 包裹 CallbackProperty
- 大规模实时渲染优化:500+ 卫星 SGP4 传播 + 轨道线邻点距离过滤
通信链路预算
- 实现标准星地链路预算模型,包含自由空间损耗、接收功率、信噪比等参数
- ECI → ECF → ENU 坐标转换实现天线方位角/仰角精确计算
- 多普勒频移基于相对速度在视线方向的分量实时计算
- 通信窗口预计算法:根据轨道高度和地球半径计算可视时间占比
API 集成
- KeepTrack Space API v4 客户端封装,支持 20+ 端点
- API Key 管理与滚动再生,401/403 自动提示
- 5 分钟请求缓存 + 限流冷却保护(429 → 2 分钟冷却)
- 编目数据 NORAD ID 自动从 TLE 行提取补全
Promise.allSettled并行请求 + 独立容错设计
文本数据处理
- 管道分隔 CSV 解析(
|分列 +\n分行 + 尾部空列补齐) - 动态 RESTful URL 路径构建(type/country/name 逐级追加)
- 国家代码双层容错(API 优先 + 本地 38 国兜底)
- Blob + URL.createObjectURL 实现客户端 CSV 一键下载
结语
SpaceDt 是一个将航天领域专业知识与前端工程实践相结合的项目。从 TLE 解析到轨道预报,从 Cesium 场景搭建到性能优化,从 ootk 坐标转换到 KeepTrack API 集成,8 大功能模块覆盖了卫星轨道可视化与空间态势感知的核心场景。
如果你对卫星轨道力学、3D 可视化、空间态势感知或 Cesium 开发感兴趣,欢迎从这个项目入手,它既是一个实用的工具,也是一个不错的学习起点。
技术交流:欢迎提出 Issue 或 PR 🚀
