跳转到主要内容

概览

轨道监视图层实时追踪约 80–120 颗与情报相关的卫星。卫星按其实际轨道高度渲染在地球仪上,带有国家编码颜色、轨道轨迹和地面覆盖投影。 仅限地球仪 — 轨道力学无法有意义地转换为平面地图投影。

显示内容

元素说明
卫星标记实际轨道高度处的 4px 发光点(LEO 约 400km,SSO 约 600–900km)
国家颜色CN = 红色,RU = 橙色,US = 蓝色,EU = 绿色,KR = 紫色,OTHER = 灰色
轨道轨迹在轨道高度处渲染为虚线路径的 15 分钟历史迹线
地面覆盖投影在每个卫星下方地表的半透明圆(星下点)
工具提示名称、国家、传感器类型(SAR Imaging / Optical Imaging / Military / SIGINT)、高度

架构

数据流

CelesTrak (free) ──2h──▶ Railway relay ──Redis──▶ Vercel edge ──CDN 1h──▶ Browser
                         (TLE parse,              (read-only,              (SGP4 propagation
                          filter,                  10min cache)             every 3 seconds)
                          classify)

成本模型

组件成本说明
CelesTrak API免费公开 NORAD TLE 数据,2h 更新周期
Railway relay~$0播种循环在现有 ais-relay.cjs 进程内运行
Redis (Upstash)可忽略单键,4h TTL,约 50KB 负载
Vercel edge~$0CDN 缓存 1h(s-maxage=3600),stale-while-revalidate 30min
浏览器 CPU客户端SGP4 计算每 3s 在本地运行 — 实时移动的服务器成本为零
关键洞察:TLE 数据变化缓慢(每 2h),但卫星位置每秒变化。通过将 TLE 送达浏览器并在客户端进行 SGP4 传播,我们以零持续服务器成本获得了实时移动。

卫星选择

抓取两组 CelesTrak 数据:military(约 21 颗卫星)和 resource(约 164 颗卫星)。经过去重和名称模式筛选后,保留约 80–120 颗与情报相关的卫星。

筛选模式

类别模式类型分类
中国侦察YAOGAN, GAOFEN, JILINSAR (YAOGAN),光学
俄罗斯侦察COSMOS 24xx/25xx军事
商业 SARCOSMO-SKYMED, TERRASAR, PAZ, SAR-LUPE, ICEYESAR
商业光学WORLDVIEW, SKYSAT, PLEIADES, KOMPSAT光学
军事SAPPHIRE, PRAETORIAN军事
欧盟/民用SENTINELSAR (Sentinel-1),光学 (Sentinel-2)

国家分类

卫星按运营国分类:CN、RU、US、EU、IN、KR、JP、IL 或 OTHER。分类基于名称(例如,YAOGAN → CN,COSMOS → RU,WORLDVIEW → US)。
注意:美国 KH-11 间谍卫星(USA-224/245/290/314/338)属于机密 — 不存在公开 TLE。所追踪的卫星是那些具有公开可用轨道根数的卫星。

技术细节

SGP4 传播

浏览器使用 satellite.js(v6)进行 SGP4/SDP4 轨道传播:
  1. initSatRecs() — 将 TLE 解析为 SatRec 对象(开销大,缓存至 TLE 刷新)
  2. propagatePositions() — 对每颗卫星:propagate()eciToGeodetic() → lat/lng/alt。同时计算 15 点轨迹(每分钟 1 点,回溯 15 分钟)
  3. startPropagationLoop() — 通过 setInterval 每 3 秒运行一次。LEO 卫星在 3 秒内移动约 23km,在地球仪上产生可见运动

地球仪渲染

属性
htmlAltitudealtitude_km / 6371(地球半径 = 6371km,globe.gl 使用归一化单位)
标记大小4px,带 6px 发光
轨迹渲染pathsData 配合 pathPointAlt 形成 3D 轨道路径
覆盖范围地表级标记(htmlAltitude = 0),带 12px 半透明环

生命周期

事件动作
图层启用loadSatellites() → 抓取 TLE → 初始化 satrecs → 启动 3s 传播循环
图层禁用stopSatellitePropagation() → 清除 interval
地球仪 → 平面地图传播停止(仅地球仪图层)
页面加载(冷启动)如果 satellites 已启用且为地球仪模式:与其他情报信号一起加载
页面卸载destroy() 中清理

断路器

客户端抓取使用断路器:连续 3 次失败触发 10 分钟冷却。冷却期间继续使用缓存数据。

Redis 键

TTL写入方形状
intelligence:satellites:tle:v14hRailway relay(2h 周期){ satellites: SatelliteTLE[], fetchedAt: number }
seed-meta:intelligence:satellites7dRailway relay{ fetchedAt: number, recordCount: number }

健康监控

  • api/health.jsintelligence:satellites:tle:v1 作为独立键检查
  • 播种元数据以 maxStaleMin: 180 检查(3h — 可承受 1 次错过的周期)

后端端点

访问面端点备注
卫星 TLE 镜像GET /api/intelligence/v1/list-satellites生成的 IntelligenceService RPC,读取 intelligence:satellites:tle:v1;当前渲染器仍使用下方列出的遗留 api/satellites.js 路径。
SAR / 光学场景搜索GET /api/imagery/v1/search-imagerybboxdatetimesourcelimit 的 STAC 后端 Sentinel 搜索,按吸附后的查询缓存。

文件

文件用途
scripts/ais-relay.cjsseedSatelliteTLEs() + startSatelliteSeedLoop()
api/satellites.jsVercel edge 处理器(Redis 读取,CDN 缓存)
src/services/satellites.ts前端服务:抓取、解析、传播、循环
src/components/GlobeMap.ts标记渲染、轨迹、覆盖、工具提示
src/components/MapContainer.ts带缓存和重水合的适配器
src/app/data-loader.ts生命周期:加载、循环、停止、清理
src/config/map-layer-definitions.ts图层注册表条目(仅地球仪)

分层可用性

功能FreeProEnterprise
地球仪上的实时卫星位置
轨道轨迹(15 分钟迹线)
地面覆盖标记
过顶预测计划中计划中
重访频率分析计划中计划中
成像窗口告警计划中计划中
跨图层关联(卫星 + GPS 干扰,卫星 + 冲突)计划中计划中
卫星情报摘要面板计划中计划中
传感器幅宽 / FOV 可视化计划中
历史过顶日志(24h)计划中计划中(30 天归档)
实际卫星图像(SAR/光学)

路线图(第 2 阶段)

过顶预测

计算用户所选位置(热点、冲突区、基地)的下次过顶时间。示例:“GAOFEN-12 将在 14 分钟后过顶塔尔图斯。“

重访时间分析

计算某位置被敌方或友方卫星观测的频率。适用于作战安全和情报缺口分析。

成像窗口告警

当 SAR 或光学卫星过顶用户关注区域时推送通知。与 Pro 投递渠道(Slack、Telegram、WhatsApp、Email)集成。

传感器幅宽可视化

基于卫星传感器规格和轨道高度,用实际视场锥替换星下点覆盖。

跨图层关联

通过将卫星位置与其他图层结合,检测与情报相关的模式:
  • 卫星 + GPS 干扰区 → 电子战背景
  • 卫星 + 冲突区 → 战场 ISR 探测
  • 卫星 + AIS 缺口 → 海上侦察指示

卫星情报摘要面板

专用 Pro 面板,包含所追踪卫星的表格:运营方、传感器能力、轨道类型、当前位置以及下次过顶用户定义关注点的时间。

历史过顶日志

过去 24h(Pro)或 30 天(Enterprise)内过顶给定位置的卫星。适用于事后分析:“事件发生时有哪些成像资产过顶?”