RepoDaily · 2026-08-28 · Infrastructure / Runtime

God's Eye View:把间谍卫星模拟器开源,而且数据是真的

#3 Infrastructure / Runtime JavaScript +1,984 bilawalsidhu/gods-eye-view 打开仓库

500 万播放的病毒式卫星视角系列开源了:原生 JS + CesiumJS 的写实 3D 地球上,航班、船舶、卫星、地震与公共摄像头全部来自真实公开数据,本周拿下 1984 星。

项目类型Infrastructure / Runtime
最适合想把公开信号(航班、船舶、地震、火灾、公共摄像头)装进一个可自托管 3D 地球的 OSINT 爱好者、地理空间开发者、教育者与内容创作者
风险等级中等:商用前需审查外部 API 条款与非 MIT 内置数据
评估时间约 30 分钟:Node 24.14.x、`npm install`、一个 Google Maps 密钥,再跑 `./scripts/dev-fresh.sh`

核心问题: 你的用法能否与数据许可(CC BY-NC-SA 海缆、ODbL 提取)和服务商条款(Google Maps、OpenSky 的商用限制)兼容?

92/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 92/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
100证据质量

包含 5 个来源、覆盖 3 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

97可安装/可试用性

检测到 6 个工作流步骤、6 个下一步动作,以及 2 个命令/安装信号。

78维护可信度

趋势热度为 +1,984 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

96生产准备度

采纳风险标记为 medium,并包含 7 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

72Agent / AI 适配度

文章正文和元数据中检测到 4 个 AI/Agent 相关信号。

项目概览

God's Eye View 是一个爆款的代码化落地。README 开篇即点明出身:这是 YouTube 播放量超 500 万的 God's Eye View 系列(前身为 WorldView)的开源版本,"You asked, so it's happening"。发布物是一个浏览器应用:写实 3D 地球之上,实时叠加航班、船舶、卫星、地震、交通与公共摄像头——技术栈完全无框架,只有原生 JavaScript、CesiumJS 与 Vite,源码以 MIT 发布。

这个项目最独特的选择是对数据质量诚实。客户端刻意把航班渲染在落后一个轮询间隔的位置,以便平滑插值;没有实时数据源的视图全部打标签而不是造假——无密钥交通标注为仿真,相机位姿在标定前标注为估计,火箭上升段回放标记 `RECONSTRUCTED ESTIMATE`。每个图层都公开来源与新鲜度状态:partial、delayed、simulated、unavailable。

底层是一个安全姿态异常清晰的本地优先客户端:`vite.config.js` 中的 Vite 中间件代理所有需要私密凭据的请求,浏览器只拿临时令牌,永远拿不到长效密钥;每个数据源是 `src/data/<layer>.js` 下的自包含模块;`docs/CURRENT-STATE.md` 被维护为权威运行时参考。

需要警惕之处同样写得明白:MIT 只覆盖源码。内置的 TeleGeography 海缆数据为 CC BY-NC-SA 3.0、禁止商用;OSM 提取的数据中心与大坝为 ODbL 1.0;Google Maps、OpenSky、adsb.lol、AISStream、CelesTrak、USGS、OSM Overpass、奥斯汀市、GBFS 等实时源在运行时按各自条款抓取、用你自己的凭据。本周期 1984 星、排名第 3,说明这种取舍正是大量用户想要的。

解决什么问题

  • 公开信号很多却散落在无数浏览器标签里——README 自己的表述是:瓶颈不在数据,而在界面。
  • 好看的地球演示通常数据是假的,真实的数据看板通常长得像看板;这个项目试图同时做到真实与电影感。
  • 实时数据源需要凭据,而粗糙的浏览器应用会把长效 API 密钥泄露到客户端。
  • 内置地理数据常常把非 MIT 条款悄悄带进"MIT 许可"的仓库;这里每个数据集的条款都写在 LICENSE 与 DATA_SOURCES.md 里。

工作原理

  1. `vite.config.js` 里的 Vite 中间件代理所有含密钥的请求:浏览器永远看不到 `OPENAI_API_KEY`、`AISSTREAM_API_KEY` 或 OpenSky OAuth 凭据——只有如 `/api/realtime/token` 签发的临时会话令牌。
  2. 每个数据源是 `src/data/<layer>.js` 下实现 `init/enable/disable/update/destroy/getStats`(可选 `getDetectableObjects`)的自包含模块,图层可独立增删。
  3. CesiumJS 在原生 JS 中渲染 Google 写实 3D Tiles;面板、HUD 与控制门面在 `src/ui.js`,与图层逻辑严格分离。
  4. 航班联系人渲染在落后一个轮询间隔的位置,使客户端插值平滑而非跳变。
  5. 每个图层公开自己的来源与新鲜度状态(partial、delayed、simulated、unavailable),建模体验带明确标签。
  6. 语音工具在服务端声明为 `GEV_REALTIME_TOOLS`,在客户端 `src/voice/gevActions.js` 执行,响应只确认真正发生的动作。

产品演示与界面预览

潜入巴哈马地表之下,展开带标签的海底电缆路由
潜入巴哈马,揭示地球下方的标签化海底电缆路由 — 潜入巴哈马地表之下,展开带标签的海缆路由——该图层的 TeleGeography 数据正是 LICENSE 中标注 CC BY-NC-SA 3.0 禁止商用的部分。 README.md image
轨道 HUD、被实时追踪的地球与 FLIR 地形,然后宣布开源
轨道 HUD、实时地球、FLIR 地形——随后宣布开源 — README 开场循环:轨道 HUD、实时追踪的地球、FLIR 地形——开源版本用代码复现的就是这段体验。 README.md image
座舱视角跟随一架实时航班飞行,同时切换传感器模式
座舱视角跟随实时航班并切换传感器模式 — 座舱视角跟随真实航班飞行并在真实地形上切换传感器模式;更新日志注明座舱高度改用航空 MSL 数据。 README.md image
在多个实时航班之间跳转,并直接落入其中一个的座舱视角
在实时航班之间跳转,直接落入座舱视角 — 在多个实时联系人之间跳转并直接落入座舱,完整展示 250 公里 Contacts 名册的一键交接。 README.md image

上手路径:一段命令从克隆到地球

`package.json` 强制 Node.js 24.14.x 或 26.x。CONTRIBUTING 给出的标准路径:`git clone https://github.com/bilawalsidhu/gods-eye-view.git`、`cd gods-eye-view`、`nvm install 24.14.0`、`nvm use 24.14.0`、`npm install`,然后 `./scripts/dev-fresh.sh`——或 `GOOGLE_MAPS_API_KEY="…" npm run dev`。

你只需要一个启用了 Map Tiles API 的 Google Maps 密钥;多数数据图层无需其他账号。macOS 上启动器会从 Keychain 读取密钥;其他平台可用环境变量或从 `.env.example` 复制的 `.env`。应用跑在 `http://localhost:4173`。提交 PR 前,`npm run build`、`npm test`、`npm run test:track`(需 dev server 在线)三者必须全绿。

架构解读:无框架,每个数据源一个模块

  • 无框架:原生 JavaScript + CesiumJS + Vite。
  • UI 在 `src/ui.js`(面板、HUD、样式、控制门面);图层逻辑在 `src/data/<layer>.js`,刻意分离。
  • 每个图层模块实现 `init/enable/disable/update/destroy/getStats`,可选 `getDetectableObjects`;新增数据源以现有图层为模板。
  • 语音工具服务端声明(`vite.config.js` 中的 `GEV_REALTIME_TOOLS`),客户端在 `src/voice/gevActions.js` 执行。
  • 视觉风格是 `src/styles/` 下的 GLSL 后处理着色器:CRT、NVG、FLIR/热成像、Noir、Snow。
  • `docs/CURRENT-STATE.md` 是权威运行时参考;改动运行时行为的 PR 必须同步更新它。

集成面:三个服务端密钥,两个客户端密钥

  • `OPENAI_API_KEY`——仅服务端;浏览器从 `/api/realtime/token` 获取临时 Realtime 会话令牌。
  • `AISSTREAM_API_KEY`——仅服务端;服务端持有 AIS websocket,浏览器轮询同源 `/api/ais-live` 缓存。
  • OpenSky OAuth(`OPENSKY_CLIENT_ID/SECRET`)——仅服务端;令牌在 `/api/opensky` 之后铸造并刷新。
  • Google Maps API 密钥——设计上就在客户端(加载写实 3D Tiles),必须限制 HTTP referrer 并限定 Map Tiles API。
  • `CESIUM_ION_TOKEN`——可选、客户端,仅用于 Bing 影像底图;托管部署用带 URL 限制的公开 `assets:read` 令牌。
  • 可选的 FIRMS 密钥:按 2026-08-24 更新日志,缺少 FIRMS 密钥只显示 `KEY REQUIRED`,不再让整个 Environmental 任务失败——地震照常加载。

维护风险:节奏极快,记录纪律严格

更新日志仅在 2026-08-18 至 08-24 之间就记了三个未发布块:四源 Map Source 托盘、分享链接 v2 状态、AIS 喂料看门狗、语音成本控制、渲染治理器、L9 发布候选矩阵,以及确定性的首跑/地图源/楼层/跟踪回归测试装置。想基于它开发,先钉住某个 commit。

补偿控制是流程化的:PR 必须让 `npm run build`、`npm test`、`npm run test:track` 全绿;运行时行为变更必须在同一 PR 更新 `docs/CURRENT-STATE.md` 与 `CHANGELOG.md`;新数据源必须在 DATA_SOURCES.md 写明许可与署名。残余风险是单人维护者在如此快节奏下的巴士系数。

你实际分发的许可:MIT 代码 + 混合数据

  • 源代码:MIT(版权 2026 Bilawal Sidhu)。
  • `src/data/local_data/telegeography_submarine_cables/`:CC BY-NC-SA 3.0——商用前必须删除这些文件或向 TeleGeography 取得商业许可。
  • 数据中心与大坝(OSM / Open Infrastructure Map 提取):ODbL 1.0——数据需署名与相同方式共享;2026-08-24 更新日志注明内置快照已剔除联系人向字段。
  • NASA FIRMS 活火快照:CC0 / 美国公共领域。
  • 实时源——Google Maps、OpenSky、adsb.lol、AISStream、CelesTrak、USGS、OSM Overpass、奥斯汀市、GBFS——运行时按各自条款抓取;部分限制商用并要求你自己的凭据。
  • `public/models/` 下的 3D 模型各有自己的许可;逐文件的作者、来源与署名见 `public/models/README.md`。

谁适合关注

适合关注

  • 想把航班、船舶、地震、火灾与摄像头装进一个可审查界面的 OSINT 实践者
  • 想基于干净的"一个数据源一个模块"架构做扩展的地理空间开发者
  • 需要用带置信度标签的实时公开数据做演示的教育者与创作者
  • 想要一套 Vite 服务端代理密钥完整参考实现的开发者

可以先跳过

  • 加固的生产级情报服务——SECURITY.md 明确该客户端面向探索、演示与学习,而非硬化生产服务
  • 不愿删除 TeleGeography 海缆数据集(CC BY-NC-SA 3.0)或另行取得授权的商业产品
  • 离线或物理隔离部署:数据源全部在运行时按服务商条款实时抓取
  • 不愿意创建、限定并收紧 Google Maps API 密钥的人

风险与注意事项

中

代码为 MIT,生产依赖审计无已知公告漏洞,但运行时依赖外部 API 的条款、配额与计费,且内置数据集并非 MIT。

  • Google Maps 密钥是必需的;SECURITY.md 警告公开部署中的未受限密钥可能被滥用并计费到你的账户。
  • `src/data/local_data/telegeography_submarine_cables/` 为 CC BY-NC-SA 3.0,商用需删除文件或向 TeleGeography 取得许可。
  • Google Maps、OpenSky 等实时源限制商用,并要求你自己的凭据。
  • 更新日志在一周内(2026-08-18 至 08-24)出现多个未发布块;二次开发前应钉住某个 commit。
  • 所有含密钥的凭据都留在服务端 Vite 代理之后;浏览器只拿临时令牌——如经 `/api/realtime/token` 的 OpenAI Realtime 会话与 `/api/ais-live` 的 AIS 缓存。
  • 设计上只有两个密钥进入客户端——Google Maps 与可选的 Cesium ion 令牌——SECURITY.md 要求两者都做限制(HTTP referrer + Map Tiles API 限定;`assets:read` 加 URL 限制)。
  • CCTV 帧代理只抓取服务端注册的摄像头/帧 URL,客户端无法把服务器变成开放中继(SSRF 缓解)。
  • 电台代理只连白名单内的 Radio Browser 主机,拒绝重定向、拒绝解析到回环/私网/链路本地/元数据地址的结果,逐连接固定 TLS,且从不代理、缓存、录制或再分发音频。
  • `.env` 被 gitignore;仓库只跟踪 `.env.example` 占位符;macOS 上启动器从 Keychain 读取密钥。
  • 漏洞通过 GitHub 私密安全公告报告,不开公开 issue。
  • 按 2026-08-24 更新日志,生产环境的传递依赖已解析到打过补丁的 DOMPurify 与 protobufjs 版本,生产依赖审计无已知公告漏洞。

替代方案比较

方案适用场景代价
CesiumJS
你只想要底层 3D 地球引擎,自己从零搭建数据图层开源引擎;可选的 Cesium ion 内容单独计费
Leaflet
轻量 2D 切片地图已够用,追求最小依赖足迹免费开源库
OpenSphere
需要地理空间情报领域成熟的态势感知 Web 客户端开源
Google Earth
想要零配置、免接线的托管写实影像消费端免费;商用另有条款

这个趋势说明了什么

发布一个城市摄像头包

CONTRIBUTING 指定奥斯汀为参考 CCTV 源,并称城市包是最好的首贡献通道:一份带坐标、署名与服务端注册帧 URL 的公开摄像头目录。

为你的城市整理公开摄像头目录,把每个帧 URL 在服务端注册(代理绝不抓取客户端提供的 URL),并按 PR 规则在 DATA_SOURCES.md 记录许可与署名。

用一个文件新增数据图层

每个数据源就是 `src/data/<layer>.js` 里实现六方法接口的单模块,以现有图层为模板是文档写明的路径。

复制现有图层模块,保持 `npm run build`、`npm test`、`npm run test:track` 全绿,同步更新 `docs/CURRENT-STATE.md` 与 `CHANGELOG.md`,并在 DATA_SOURCES.md 写明来源许可。

商业分支需要的是数据审计,不是代码审计

MIT 只覆盖源码。海缆数据集为非商用 CC BY-NC-SA 3.0,OSM 提取为 ODbL 1.0,实时源按各自条款要求你的凭据。

任何商业部署前,删除 `src/data/local_data/telegeography_submarine_cables/` 或向 TeleGeography 取得许可,核对数据中心/大坝提取的 ODbL 署名,并确认 Google Maps 与 OpenSky 对你用途的条款。

下一步建议

花 30 分钟、一个 API 密钥把它跑起来

整套体验只需 Node 24.14.x 和一个 Google Maps 密钥即可安装——多数数据图层不需要其他账号。

  1. 克隆仓库:`git clone https://github.com/bilawalsidhu/gods-eye-view.git && cd gods-eye-view`
  2. 设置运行时:`nvm install 24.14.0 && nvm use 24.14.0`(或 Node 26.x)
  3. 安装依赖:`npm install`
  4. 创建启用 Map Tiles API 的 Google Maps 密钥,并限定到你的 referrer
  5. 运行 `./scripts/dev-fresh.sh`——或 `GOOGLE_MAPS_API_KEY="…" npm run dev`——打开 `http://localhost:4173`
  6. 打开 Contacts 任务启动器,跳进座舱,再切换传感器风格(FLIR、NVG、CRT)

RepoDaily 判断

God's Eye View 是少见的"把真引擎开源"的爆款演示:原生 JS + Cesium 承载真实公开信号、诚实的状态标注、加固过的代理,以及写清楚的许可边界。中等风险全部来自数据侧——服务商条款、必需的 Google Maps 密钥、非 MIT 的内置数据集——而不是代码本身。

信息来源