juliensimon/starlink-viz

GitHub: juliensimon/starlink-viz

一款实时3D Starlink卫星追踪器,用于可视化卫星网络性能。

Stars: 15 | Forks: 4

## 标题: Starlink 任务控制中心 表情符号: 🛰 颜色来源: blue 颜色目标: indigo 软件开发工具包: docker 应用端口: 7860 置顶: false # starlink-viz 实时3D Starlink卫星追踪与任务控制面板。追踪SpaceX Starlink星座中的每一颗卫星,监控实时的地面终端遥测数据,可视化地面站,观测卫星切换,并预测星间激光链路(ISL)路由——所有计算均基于公开可用数据。包含Stellarium风格的夜空视图,带有星座和太阳光照建模。使用Next.js、React Three Fiber和Three.js构建。 ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/f376a19d5e214419.svg) ![Next.js](https://img.shields.io/badge/Next.js-16-black) ![Three.js](https://img.shields.io/badge/Three.js-0.183-049EF4) ![React](https://img.shields.io/badge/React-19-61DAFB) ![TypeScript](https://img.shields.io/badge/TypeScript-5-3178C6) ![satellite.js](https://img.shields.io/badge/SGP4-satellite.js-orange) ![Satellites](https://img.shields.io/badge/satellites-~10%2C000-blueviolet) ![Ground Stations](https://img.shields.io/badge/gateways-HF_dataset-ff9933) ![License](https://img.shields.io/badge/license-MIT-green) ### 太空视图 ![Space View](https://raw.githubusercontent.com/juliensimon/starlink-viz/master/docs/space-view.png) ### 天空视图 ![Sky View](https://raw.githubusercontent.com/juliensimon/starlink-viz/master/docs/sky-view.png) ## 功能介绍 ### 太空视图(从太空俯视地球) - **约10,000颗Starlink卫星**,通过SGP4轨道力学在5个轨道壳层中实时传播 - **GPS星座**与Starlink卫星一同追踪,可悬停识别 - **实时的地面终端遥测**,通过gRPC连接真实的Starlink地面终端(或使用模拟数据的演示模式) - **天文精度的太阳和月亮**,具有实时定位、镜头光晕和自然月相变化 - **卫星切换追踪**——监控您的地面终端在卫星之间的切换 - **地面站**数据来自FCC/国际备案文件(从[HF数据集](https://huggingface.co/datasets/juliensimon/starlink-ground-stations)加载),包含运营/计划状态 - **ISL路由预测**——建模星间激光链路,包含受限PoP的网关选择、视线检查以及每个网关的回程估算 - **连接光束**可视化,从地面终端到连接卫星(青色上行链路,绿色ISL跳数,橙色下行链路) - **演示位置**——5个偏远位置(冰岛海峡、大西洋、墨西哥湾、凯尔特海),在这些位置ISL路由是必需的 - **昼夜地球**模型,暗面带有城市灯光,大气辉光效果 ### 天空视图(观察者视角的Stellarium风格夜空) - **地平线相机**——从您的地面终端位置提供360度全景视图,可从地平线拖拽到天顶 - **约500颗参考恒星**,基于星等大小、B-V色指数着色,最亮的恒星带有命名标签 - **88个IAU星座**,带有棍形线条和标注名称 - **太阳光照模型**——圆柱形地球阴影将处于阴影中的卫星亮度调暗至10%;天空渐变感知太阳,经历白天/黄昏/夜晚阶段过渡 - **悬停时的卫星轨迹**——在穹顶上显示过去(青色)和未来(黄色)的轨道弧线 - **工具提示**显示卫星(名称、NORAD ID、方位角/仰角、壳层、日照状态)和恒星(名称、星等) - **连接卫星的辉光光环**,实时跟随切换变化 - **天空抬头显示器(HUD)**——太阳仰角、卫星计数(日照/阴影)、UTC时间、白天能见度警告 - **罗盘方向**,每隔10度一个刻度,北/南/东/西方向加粗 ## 快速开始 ``` npm install npm run dev ``` 访问[http://localhost:3000](http://localhost:3000)。如果网络中未检测到Starlink地面终端,将自动激活**演示模式**并使用模拟遥测数据。 ## 连接Starlink地面终端 服务器通过gRPC连接到`192.168.100.1:9200`(标准的Starlink路由器地址)的Starlink地面终端。您必须连接到Starlink网络。 ``` # 自定义 dish 地址 DISH_ADDRESS=192.168.100.1:9200 npm run dev # 强制 demo 模式(无需 dish) DEMO_MODE=true npm run dev # 自定义 dish 位置(默认为 48.910°N, 1.910°E) NEXT_PUBLIC_DISH_LAT=37.7749 NEXT_PUBLIC_DISH_LON=-122.4194 npm run dev ``` ## 架构 ``` server.ts Custom HTTP + WebSocket + Next.js server ├── gRPC client Polls dish status (1s) and history (5s) ├── WebSocket server Broadcasts telemetry to all browser clients └── Next.js app Serves the frontend src/ ├── components/ │ ├── scene/ 3D scene (React Three Fiber) │ │ ├── Globe Earth with day/night textures │ │ ├── SatellitePropagator Headless SGP4 propagation (shared by both views) │ │ ├── Satellites Space view instanced mesh renderer │ │ ├── SkyView Sky view root (groups all sky components) │ │ ├── sky/ Sky view components │ │ │ ├── SkyDomeCamera Stellarium-style horizon camera + OrbitControls │ │ │ ├── SkyEnvironment Ground plane, sky gradient, horizon ring, compass │ │ │ ├── SkyGrid Elevation circles, azimuth lines, cardinal labels │ │ │ ├── SkyConstellations 88 IAU constellation lines + labels │ │ │ ├── SkySatellites Az/el dome projection with sun shadow coloring │ │ │ ├── SkyStars ~500 reference stars with RA/Dec→Az/El transform │ │ │ ├── SkyBeam Glow halo on connected satellite │ │ │ ├── SkyTooltip Hover tooltips for satellites + stars │ │ │ └── SkyTrajectory ±5min trajectory arc on hover │ │ ├── GpsSatellites GPS constellation overlay │ │ ├── Sun Directional light + glow + lens flare │ │ ├── Moon Textured sphere with Fresnel halo │ │ ├── Atmosphere Fresnel glow shader │ │ ├── GroundStations Gateway markers (star-shaped, operational/planned) │ │ ├── ConnectionBeam Dish-to-satellite-to-gateway beams (always mounted) │ │ ├── DishMarker Your dish location │ │ └── SceneSetup Camera, controls, starfield │ └── hud/ Overlay panels │ ├── StatusBar Connection state, uptime, quality │ ├── TelemetryPanel Ping, throughput, SNR charts │ ├── SatelliteInfoPanel Satellite link, gateway, PoP, confidence │ ├── HandoffPanel Starlink Network stats, shell info, handoffs │ ├── SkyHud Sky view stats (sun elevation, sat counts, UTC) │ ├── EventLog Real-time event feed │ └── ViewControls Space/Sky toggle, auto-rotate, altitude filter ├── data/ Embedded datasets │ ├── bright-stars.ts ~500 stars (mag ≤ 4.0) with J2000 RA/Dec │ └── constellations.ts 88 IAU constellation stick figures ├── stores/ Zustand state (app + telemetry) ├── hooks/ useSatellites, useHandoff └── lib/ ├── satellites/ TLE fetching, SGP4 propagation, satellite store ├── websocket/ Client + server + protocol + types └── utils/ Coordinates, astronomy, observer frame, sun shadow, star coordinates, shell colors, formatting ``` ## 命令 | 命令 | 描述 | |------|------| | `npm run dev` | 启动开发服务器(HTTP + WebSocket + Next.js) | | `npm run dev:next` | 仅启动Next.js(无后端轮询) | | `npm run build` | 生产环境构建 | | `npm run start` | 启动生产服务器 | | `npm run test` | 运行测试(vitest) | | `npm run update-gs` | 更新地面站数据 | | `npm run ingest` | 从CelesTrak导入最新的TLE数据 | ## 技术栈 - **[Next.js 16](https://nextjs.org/)** — 应用路由、API路由、SSR - **[React Three Fiber](https://r3f.docs.pmnd.rs/)** — Three.js的React渲染器 - **[drei](https://drei.docs.pmnd.rs/)** — R3F辅助工具(OrbitControls、Billboard、Text、Stars) - **[satellite.js](https://github.com/shashwatak/satellite-js)** — SGP4/SDP4轨道传播 + GMST - **[Zustand](https://zustand.docs.pmnd.rs/)** — 轻量级状态管理 - **[starlink-dish](https://www.npmjs.com/package/starlink-dish)** — Starlink地面终端本地gRPC API的TypeScript客户端 - **[Tailwind CSS 4](https://tailwindcss.com/)** — 样式化 ## 工作原理 **卫星传播**:从CelesTrak获取TLE(两行轨道根数)数据。一个无头的`SatellitePropagator`组件使用SGP4在每个动画帧计算每颗卫星的位置,并写入共享的`Float32Array`中。太空视图和天空视图都读取这个共享缓冲区——无论哪个视图处于活动状态,传播只发生一次。 **天空视图**:卫星位置使用ENU(东-北-天)参考坐标系(由地面终端的经纬度构建)从地心3D坐标投影到观察者的本地水平坐标系(方位角/仰角)。每颗卫星被放置在其方位角/仰角位置的虚拟穹顶上。恒星使用通过格林尼治恒星时进行的RA/Dec→Az/El转换。太阳光照使用圆柱形地球阴影模型来确定哪些卫星处于日照中,哪些处于阴影中。 **地面终端遥测**:Node.js服务器连接到Starlink地面终端的gRPC接口,轮询状态和信号历史。数据通过WebSocket广播到所有连接的浏览器,并存储在Zustand中。 **太阳和月亮**:位置通过真实的天文算法计算得出——太阳来自黄道经度和地球自转轴倾角,月亮来自平均轨道要素并加上摄动校正。方向光跟随太阳,因此地球的昼夜两侧和月相在物理上都是准确的。 ## 数据源与准确性 本项目旨在尽可能准确,完全使用公开数据。未使用任何SpaceX专有系统、内部API或机密星座参数。 | 数据源 | 提供内容 | |--------|----------| | [CelesTrak / NORAD](https://celestrak.org/NORAD/elements/gp.php?GROUP=starlink&FORMAT=tle) | 每个被追踪的Starlink和GPS卫星的TLE轨道参数 | | [Starlink地面终端gRPC API](https://github.com/sparky8512/starlink-grpc-tools) | 来自您自己地面终端的实时遥测数据(信号、吞吐量、天线方向) | | [FCC / ITU备案](https://fcc.report) | 地面站位置,并与社区研究进行交叉引用 | | [Hipparcos / Yale BSC](https://heasarc.gsfc.nasa.gov/W3Browse/star-catalog/bsc5p.html) | 约500颗亮星的位置(J2000 RA/Dec、星等、B-V色指数) | | [IAU星座数据](https://www.iau.org/public/themes/constellations/) | 88个星座的棍形线条定义 | | Starlink DNS 约定 | PoP代码映射(例如,`customer.frntdeu.pop.starlinkisp.net` → 法兰克福) | | 系统 traceroute / DNS | 网络路径分析——您的流量使用哪个互联网出口点 | **本应用无法访问的内容**:SpaceX的内部卫星调度、星间激光链路路由、每颗卫星的容量/负载、地面终端使用的精确轨道数据(比公开TLE更准确)、或卫星机动/离轨状态。 除了公开数据和实时地面终端读数外,所有内容都是近似值或合理推测。关于哪些是实测数据、哪些是推断数据的完整分解,请参阅[技术审查](docs/TECHNICAL_REVIEW.md)。 ## 舰队监控与历史数据集 `/fleet`页面使用历史NORAD TLE数据跟踪Starlink星座的健康状况——星座增长、高度分布、壳层填充率、发射节奏、卫星生命周期、轨道平面和ISL覆盖范围。 完整数据集已在Hugging Face上发布:**[juliensimon/starlink-fleet-data](https://huggingface.co/datasets/juliensimon/starlink-fleet-data)** - **每日星座快照**,追踪每一颗Starlink卫星(2019年5月至今) - 每日按壳层汇总:按状态(运行中、升轨中、离轨中、衰变、异常)统计的卫星数量 - 提供Parquet文件,可直接与`datasets`、pandas或DuckDB一起使用 ## 文档 - **[用户指南](docs/USER_GUIDE.md)** — 设置、配置、界面导览和功能参考 - **[技术审查](docs/TECHNICAL_REVIEW.md)** — 数据源、准确性分析,以及哪些是实测数据、哪些是近似值 ## 许可证 MIT
标签:3D可视化, Docker, gRPC, ISL路由, React, satellite.js, SGP4, Starlink卫星, Syscalls, Three.js, TypeScript, 任务控制台, 卫星切换, 卫星追踪, 地面站, 天文建模, 天文观测, 天空视图, 安全插件, 安全防御评估, 实时系统, 实时追踪, 星座视图, 用户界面, 空间视图, 自动化攻击, 航天技术, 航天监控, 请求拦截, 轨道力学, 遥测数据