sanztheo/SeeYou

GitHub: sanztheo/SeeYou

一个运行在浏览器的实时全球情报平台,通过 3D 可视化聚合多源实时数据以实现统一监控与态势感知。

Stars: 17 | Forks: 3

# SEEYOU SeeYou — Real-time global intelligence platform
**在浏览器中运行的实时全球情报平台。** 追踪飞机、卫星、地震、野火、网络威胁、海军舰艇、军事基地、核设施、空间碎片等——所有这一切均通过具有军用级着色器的 3D 地球仪呈现。 20+ 实时数据图层。25+ 免费 API。零成本。 [开始使用](#getting-started) · [功能](#features) · [架构](#architecture) · [数据源](#data-sources)

## 什么是 SeeYou? SeeYou 是一个全栈情报平台,它从 25+ 个公共 API 聚合实时数据,并将所有内容呈现在交互式的 CesiumJS 3D 地球仪上。每一个数据点都是真实的——实时飞机应答机、轨道力学计算、地震读数、卫星探测到的火灾、地缘政治事件等。 整个技术栈在本地运行,无需付费服务。
## 功能 ### 监控图层 | 图层 | 描述 | 来源 | |-------|-------------|--------| | **飞机** | 30,000+ 架次实时航班——位置、呼号、高度、航向、垂直速度 | adsb.lol ADS-B | | **卫星** | 10,000 个轨道物体,包含 SGP4 推演的位置和轨道路径 | CelesTrak TLE | | **空间碎片** | 63,000 个被追踪的物体——碎片、火箭箭体、分析物体 | CelesTrak / Space-Track | | **监控摄像头** | 来自 6 大洲 30+ 个城市的 800+ 个实时视频流 | TfL, NYC DOT, Caltrans 等 | | **交通** | 真实道路网络上的动画粒子流 | OpenStreetMap Overpass | | **天气雷达** | 带有时间动画的全球雷达叠加层 | RainViewer | | **温度** | 全球温度热力图叠加层 | OpenWeatherMap | | **空气质量** | 全球 AQI 热力图叠加层(美国 EPA 标准) | WAQI / AQICN | | **风** | 使用 IDW 插值的 4,000 粒子风流 | Open-Meteo | | **METAR** | 带有飞行分类(VFR/MVFR/IFR/LIFR)的航空气象站 | aviationweather.gov | | **自然事件** | 活跃的野火、风暴、火山、洪水 | NASA EONET | ### 情报图层 | 图层 | 描述 | 来源 | |-------|-------------|--------| | **地震** | 实时地震活动,震中带有动画冲击波 | USGS GeoJSON | | **野火** | 卫星探测到的活跃火灾及其辐射功率 | NASA FIRMS | | **海底电缆** | 全球海底电缆网络和登陆点 | TeleGeography | | **军事基地** | 全球 2,000+ 个设施——空军、海军、陆军 | Wikidata | | **核设施** | 440+ 个反应堆和武器设施及其状态 | IAEA | | **海军舰艇** | 通过 AIS 追踪的受制裁船只并带有警报标志 | AIS data | | **网络威胁** | 源国家与目标国家之间的动画攻击弧线 | ThreatFox, AbuseIPDB | | **地缘政治事件** | 实时进行地理定位的全球新闻和冲突事件 | GDELT | | **空间天气** | 极光卵、Kp 指数、太阳风暴警报 | NOAA SWPC | | **交汇警报** | 当图层在地理上交叉时发出的多信号警告 | 内部引擎 | ### 军事情报 - **IMM-EKF 预测** — 交互式多模型扩展卡尔曼滤波器使用 4 种运动模型提前 5 分钟预测军用飞机轨迹 - **模式检测** — 使用圆形拟合和双峰航向分析自动进行轨道、战斗空中巡逻、等待航线和过境分类 - **战术着色器** — GLSL 后处理:夜视(NVG)、FLIR 热成像、CRT 显示器、Anime 赛璐珞着色 - **HUD 叠加层** — 带有瞄准十字准线、坐标读数和状态指示器的每个着色器专属抬头显示器(HUD) ### 界面 - 带有每图层过滤器和计数器的可折叠侧边栏 - 跨所有数据域的通用搜索 (Cmd+K) - 带有视口矩形的 SVG 小地图 - 带有时间导航的 UTC 时间轴 - 每个数据图层的点击检查弹窗 - 带有活动图层指示器的情报图例 - 用于着色器、全屏和导航的键盘快捷键
## 技术栈 ``` Frontend React 19 · TypeScript · Vite · TailwindCSS · CesiumJS (Resium) · GLSL Shaders · Web Workers Backend Rust · Axum · Tokio · 18 Workspace Crates · SGP4 · nalgebra Infrastructure Redis 7 · Docker Compose · WebSocket ```
## 开始使用 ### 前置条件 | 工具 | 版本 | |------|---------| | Node.js | 20+ | | Rust | 1.75+ | | Docker | 24+(可选,仅用于完整的本地基础设施) | | Cesium Ion Token | 免费——[在此注册](https://ion.cesium.com/) | ### 设置 ``` # Clone git clone https://github.com/sanztheo/SeeYou.git cd SeeYou # 配置环境 cp .env.example .env # 编辑 .env — 添加你的 Cesium Ion token ``` ### 运行选项 #### 选项 A — Railway 基础设施(无需本地 Docker,如果您的数据库/Redis在 Railway 上,则推荐使用) 如果您的 `.env` 使用 Railway 服务,并且 **Redpanda 无法公开访问**,请设置: ``` BUS_ENABLED=false ``` 然后只需运行 2 个终端: ``` # Terminal 1:backend(端口 3001) cd backend cargo run -p server # Terminal 2:frontend(端口 5173) cd frontend npm install npm run dev ``` 除非您拥有可访问的公共代理(`REDPANDA_BROKERS_PUBLIC`),否则**不要**运行 `consumer_redis` / `consumer_postgres`。 #### 选项 B — 完整的本地总线栈(Docker + Redpanda 消费者) ``` # Infra docker compose up -d redis postgres redpanda surrealdb # Terminal 1:backend cd backend cargo run -p server # Terminal 2:redis consumer cd backend cargo run -p consumer_redis # Terminal 3:postgres consumer cd backend cargo run -p consumer_postgres # Terminal 4:frontend cd frontend npm install npm run dev ``` 可选的图消费者: ``` cd backend cargo run -p consumer_graph ``` #### tmux 助手(4 个窗格) ``` # 默认 Railway 模式(无 Docker,如果 broker 仅为内部,则自动禁用 consumers) ./scripts/dev-tmux.sh # 强制 consumers RUN_CONSUMERS=1 ./scripts/dev-tmux.sh # 首先启动本地 Docker infra ./scripts/dev-tmux.sh seeyou-dev --docker ``` 打开 **http://localhost:5173**。地球仪立即加载。实时数据将在几秒钟内流入。 ### 验证 ``` # Backend 健康检查 curl http://localhost:3001/health # → {"status":"ok","redis":"connected"} # WebSocket — 打开浏览器 DevTools → Network → WS 标签页 # 你应该每 2 秒看到 AircraftBatch 消息 ```
## 架构 SeeYou 遵循 **轮询-缓存-广播** 架构。Rust 后端持续轮询外部 API,将结果缓存到带有 TTL 的 Redis 中,并通过 WebSocket 将更新广播给所有连接的客户端。React 前端使用 GPU 批处理的 Primitive Collections 将所有内容渲染在 CesiumJS 3D 地球仪上。 ``` External APIs (25+) │ │ HTTP polling (2s – 30min) ▼ ┌─────────────────────────────────────────┐ │ Rust Backend (Axum) │ │ │ │ 18 crates · 8 background trackers │ │ IMM-EKF prediction · SGP4 propagation │ │ Redis cache (15s – 24h TTL) │ │ REST API + WebSocket broadcast │ └────────────────┬────────────────────────┘ │ │ WebSocket (chunked JSON) │ REST (JSON) ▼ ┌─────────────────────────────────────────┐ │ React Frontend (Vite) │ │ │ │ 20+ CesiumJS Primitive layers │ │ GLSL post-processing shaders │ │ Zero external state libraries │ │ BillboardCollection / PointPrimitive │ │ ~20 GPU draw calls (down from 8000+) │ └─────────────────────────────────────────┘ ``` ### 项目结构 ``` SeeYou/ ├── frontend/ React + CesiumJS SPA │ └── src/ │ ├── components/ 33 domain component groups │ ├── hooks/ State management (zero dependencies) │ ├── services/ REST API clients │ ├── shaders/ GLSL post-processing │ ├── types/ TypeScript interfaces │ └── workers/ Web Workers ├── backend/ Rust workspace │ └── crates/ │ ├── server/ Entry point — Axum, config, AppState │ ├── api/ REST route handlers │ ├── ws/ WebSocket broadcast layer │ ├── cache/ Redis caching with TTL │ ├── services/ ADS-B + METAR trackers │ ├── prediction/ IMM-EKF trajectory prediction │ ├── cameras/ 6-provider aggregation + health checks │ ├── satellites/ CelesTrak TLE + SGP4 │ ├── events/ NASA EONET │ ├── weather/ Open-Meteo grid │ ├── traffic/ Overpass API road parser │ ├── cables/ Submarine cable network │ ├── seismic/ USGS earthquake data │ ├── fires/ NASA FIRMS fire detection │ ├── gdelt/ Geopolitical event stream │ ├── maritime/ AIS vessel tracking │ ├── cyber/ Cyber threat intelligence │ └── space_weather/ NOAA space weather ├── docs/ Documentation (Docsify) └── docker-compose.yml Redis infrastructure ``` ### 性能 所有可视化图层均使用命令式 CesiumJS Primitive Collections,而不是 Entity API。每个广告牌、标签和点都被批处理为每个集合的单次 GPU 绘制调用。 | 指标 | 数值 | |--------|-------| | GPU 绘制调用(所有图层均处于活动状态) | ~20 | | 启用 20+ 个图层时的 FPS | 50-60 | | 飞机更新延迟 | ~2 秒 | | 卫星推演 | SGP4 with WGS-84 | | 预测范围 | 300 秒 | | 风粒子数 | 4,000 | | 最大并发飞机数 | 30,000+ | | 最大追踪轨道物体数 | 63,000+ |
## 数据源 所有数据均从免费的公共 API 获取。可选的 API 密钥可解锁额外图层(温度、空气质量)。 | 来源 | 数据 | 轮询 | |--------|------|---------| | adsb.lol | 飞机位置 (ADS-B) | 2秒 | | CelesTrak | 卫星 TLE / 空间碎片 | 60秒 | | USGS | 地震事件 | 5分钟 | | NASA FIRMS | 活跃野火 | 30分钟 | | NASA EONET | 自然灾害 | 30分钟 | | GDELT | 地缘政治事件 | 15分钟 | | NOAA SWPC | 空间天气、极光 | 15分钟 | | TeleGeography | 海底电缆 | 24小时 | | ThreatFox / AbuseIPDB | 网络威胁 | 15分钟 | | aviationweather.gov | METAR 气象站 | 5分钟 | | Open-Meteo | 天气网格 | 10分钟 | | RainViewer | 雷达切片 | 5分钟 | | OpenWeatherMap | 温度热力图 | 按需 | | WAQI / AQICN | 空气质量热力图 | 按需 | | Overpass API | 道路网络 | 按需 | | TfL / NYC DOT / Caltrans | CCTV 摄像头视频流 | 5分钟 | | Wikidata | 军事基地 | 静态 | | IAEA | 核设施 | 静态 |
## 键盘快捷键 | 按键 | 操作 | |-----|--------| | `1` | 夜视着色器 | | `2` | FLIR 热成像着色器 | | `3` | CRT 显示器着色器 | | `4` | Anime 着色器 | | `5` | 重置为正常 | | `F` | 全屏 | | `B` | 切换侧边栏 | | `/` 或 `Cmd+K` | 搜索 |
## 环境变量 ``` # 必需 VITE_CESIUM_ION_TOKEN= # Free from https://ion.cesium.com VITE_WS_URL=ws://localhost:3001/ws VITE_API_URL=http://localhost:3001 REDIS_URL=redis://127.0.0.1:6379 # 可选 — 天气热力图图层 VITE_OPENWEATHER_API_KEY= # Free from https://home.openweathermap.org/api_keys VITE_WAQI_TOKEN= # Free from https://aqicn.org/data-platform/token/ # 可选 — backend 调优 SERVER_HOST=0.0.0.0 SERVER_PORT=3001 POLL_INTERVAL_SECS=2 SATELLITE_POLL_INTERVAL_SECS=60 CAMERA_POLL_INTERVAL_SECS=300 METAR_POLL_INTERVAL_SECS=300 WEATHER_POLL_INTERVAL_SECS=600 EVENTS_POLL_INTERVAL_SECS=1800 ```
## 许可证 本项目为专有项目,不开源。 版权所有 (c) 2026 Theo Sanz。保留所有权利。 未经所有者事先书面许可,不得进行任何使用、复制、修改、分发、部署、转售、抓取、AI 训练、基准测试或衍生作品。 许可请求:sanztheopro@gmail.com 如果此代码库在 GitHub 上公开,则仅适用 GitHub 平台及其服务条款所要求的有限权利(例如,在 GitHub 上查看和派生)。未授予更广泛的许可。 有关完整条款,请参阅 [LICENSE](LICENSE) 和 [TERMS.md](TERMS.md)。
标签:3D地球, CesiumJS, React, Rust, Syscalls, 地理空间情报, 实时监控, 开源情报, 数据可视化, 网络流量审计, 自动化攻击