每天一个开源项目#82 9.2K星God's Eye View:公开信号3D地球

Trending Rank: #1 | 日期: 2026-08-28 | Stars: 9,291 | Forks: 1,988 | 语言: JavaScript | License: GitHub API 标记为 NOASSERTION;仓库 LICENSE 为 MIT,第三方数据另按各自条款授权

把航班、船舶、卫星、地震、公共摄像头这些公开信号放进同一个界面,听起来像一个很容易写成花架子的项目。God's Eye View 有意思的地方在于,它没有停在"地图上打点"这一步,而是把数据源、刷新状态、相机控制、三维渲染、语音指令和分享链接都塞进一个浏览器端的 Cesium 应用里。

这类项目最难的部分通常不是 UI。真实世界的数据会延迟、缺字段、被限流、偶尔返回空结果;镜头正在跟随一架飞机时,用户又可能点了附近船舶、公共摄像头或语音让它飞去另一个城市。God's Eye View 的源码里能看到不少"被问题打过"的痕迹:图层生命周期有事务队列,轮询失败会降级为明确状态,分享链接恢复要等镜头和图层都落地,性能文档也把不同硬件和样本条件写清楚。

我更愿意把它看成一个实时地理态势可视化样板,而不是单纯的 OSINT 玩具。它适合研究"多源公开数据如何在浏览器里被诚实地呈现",也适合做 Cesium、Vite 中间件、实时图层调度和可视化性能控制的源码阅读材料。

📋 项目概览

项目 内容
项目名 bilawalsidhu/gods-eye-view
一句话 在浏览器中把公开航班、船舶、卫星、交通、摄像头和环境信号组织成一个可交互 3D 地球
GitHub 地址 github.com/bilawalsidh...
Stars 9,291(2026-08-28 Trending 快照);同日稍后 API 读数为 9,305
Forks 1,988(2026-08-28 Trending 快照);同日稍后 API 读数为 1,990
语言 JavaScript 96.0%,CSS 2.8%,HTML 0.7%,Shell 0.4%(脚本快照);API 语言字节也以 JavaScript 为主
License GitHub API: NOASSERTION;源码 LICENSE: MIT;Google、OpenSky、TomTom、TfL、TeleGeography 等数据源保留各自条款
版本 package.json: 0.1.0;GitHub Releases: 暂无正式 Release
运行要求 package.json 要求 Node.js >=24.14.0 <25 或 >=26 <27
代码规模 浅克隆审计到 428 个 tracked files;src 315 个文件;154 个 src 测试文件

🔥 为什么值得关注

多数"全球态势图"项目最后都会变成一堆图层开关。God's Eye View 往前走了一步:它把公共数据源的真实性和不可靠性一起放进产品模型。航班来自 OpenSky 或 adsb.lol,船舶走 AISStream,卫星用 CelesTrak TLE 推算,公共摄像头按城市或机构来源接入,交通在没有 TomTom key 时明确退回模拟模式。它没有把模拟数据包装成实时数据,这点很重要。

从工程角度看,它的边界也挺清楚。浏览器负责 Cesium 3D 地球、图层渲染、HUD、相机跟随和交互;Vite dev/preview server 承担同源代理、凭证保管、缓存、限流和上游 API 适配。SECURITY.md 里明确写了本项目是 local-first client,用于探索、演示和学习,不是加固过的生产服务。这个定位反而让它更适合作为工程样本:你能看到一个复杂实时可视化产品在"可玩"和"诚实"之间怎么取舍。

它的热度来自视觉效果,但我看源码时更在意几个小细节:DataLayerManager 用每个图层自己的 intent epoch 和 Promise 链避免并发开关打架;图层状态被归一成 ON、LOADING、DEGRADED、STALE、FALLBACK、UNAVAILABLE;性能文档没有只写"60 FPS",而是把检测密度、对象数、堆内存和采样环境都列出来。这些细节比 README 的大片 GIF 更能说明项目有没有工程含量。

🏗️ 核心特性

  1. 多源公开信号接入

    项目目前在源码注册表里有 16 个生产图层:flights、military、earthquakes、satellites、rocket-launches、traffic、cctv、radio、bikeshare、ais-live-vessels、military-installations、military-awareness,以及 dams、datacenters、NASA FIRMS、本地海底光缆等图层。Vite 侧审计到 24 个 /api/* 路由,用来处理 OpenSky、CelesTrak、TomTom、FIRMS、AIS、CCTV、OpenAI Realtime token、天气和地形高度等请求。

    入口文件能看出它不是动态乱挂图层,而是在启动时显式注册并封存注册表:

    js 复制代码
    const dataManager = new DataLayerManager(viewer, {
      allowQaRegistration: import.meta.env.DEV,
    });
    dataManager.register(flightsLayer);
    dataManager.register(militaryFlightsLayer);
    dataManager.register(earthquakesLayer);
    dataManager.register(satellitesLayer);
    dataManager.register(rocketLaunchesLayer);
    dataManager.register(trafficLayer);
    dataManager.register(cctvLayer);
    dataManager.register(radioLayer);
    dataManager.register(bikeshareLayer);
    dataManager.register(aisLiveVesselsLayer);
    dataManager.finalizeRegistrations(LAYER_STATE_REGISTRY);

    这种写法少了点"插件化"的优雅,但好处很直接:每个生产图层都必须出现在序列化注册表里,分享链接恢复、图层状态保存和 QA 注入边界都能被测试卡住。

  2. 图层刷新状态不糊弄用户

    实时数据最怕"看起来还在动,其实已经断了"。DataLayerManager 把不同图层的 getStats() 归一成有限状态:nominalloadingdegradedstalefallbackunavailable。源码里还专门区分 guidance 状态和故障状态,比如缩放不够导致需要用户操作时,不会被当成数据源错误。

    js 复制代码
    const FEED_STATE_LABELS = Object.freeze({
      nominal: 'ON',
      loading: 'LOADING',
      degraded: 'DEGRADED',
      stale: 'STALE',
      fallback: 'FALLBACK',
      unavailable: 'UNAVAILABLE',
    });

    README 里提到的"keyless traffic 是模拟模式""launch ascent playback 标为 reconstructed estimate",在 DATA_SOURCES.md 和源码中也能对上。对这类项目来说,这比单纯追求图层数量更可靠。

  3. 相机、跟踪和分享链接是同一套控制问题

    God's Eye View 的交互不是"点一个点,弹一个框"。它支持跟踪航班、切进 cockpit、从船舶或火点跳到附近 CCTV、语音让镜头飞往目的地,还能把镜头、风格、图层和目标序列化进 URL。源码里 cameraHandoff.test.mjsnavigationPolicy.jsworldFocus.js 这些文件说明,项目把相机归属当成共享资源处理,而不是每个功能自己 flyTo() 一下。

    一个实际问题是:用户刚进入 cockpit,后台恢复分享链接的旧目标还没完成,如果旧任务再把镜头抢回来,体验会非常怪。项目用 generation、ownership、deferred navigation 和取消路径来处理这类竞争。代码读起来不轻松,但这是实时可视化应用常见的脏活。

  4. 视觉层做得多,但性能数据有边界

    docs/PERFORMANCE.md 记录的是 2026-08-22、Apple M5、Chrome 150、1440 x 900、DPR 1 的一次硬件渲染基线。它不是通用性能承诺。这个边界写得很清楚。

    场景 项目文档中的采样结果
    启动 initial settle 中位数 1,855.836 ms
    Flights 单图层冷启动 667.671 ms,247 个对象,60/60 FPS
    CCTV city 冷启动 19,608.240 ms,48 个对象,60/60 FPS
    Datacenters 冷启动 817.693 ms,4,362 个对象,59.6/60 FPS
    Detection 100% 密度 34.4/35.5 FPS,约 8,170 条观测
    Combined static 11,575 个对象,872.2 MiB JS heap,57.6/60 FPS
    AISStream keyed pass 12,000 vessels,6.4 s activation,22.1/29.8 FPS

    这里最有价值的不是某个 FPS 数字,而是它把"对象数、堆内存、前后台、是否 keyed source、是否 live source 空结果"都记录下来了。后续优化才有可比性。

  5. 语音控制接入 OpenAI Realtime,但没有把 key 扔给浏览器

    语音部分走 /api/realtime/token 拿短时 token,OPENAI_API_KEY 留在服务端。SECURITY.md 也把 client-side key 和 server-side key 分开:Google Maps 和 Cesium ion 是浏览器可见的公钥式配置,OpenAI、AISStream、OpenSky OAuth 这些私钥留在 Vite 中间件侧。

    成本边界也被写进实现里。本次测试日志里可以看到 voice cost tracker 的测试用例,包含 warning threshold、hard cap、未知模型按最贵已知费率计价、cap 后工具调用不再执行等路径。它不能替代真实账单限制,但至少没有只在 README 里喊"低成本"。

🔬 技术架构深度解析

先看数据平面。God's Eye View 的主路径可以概括成这样:

text 复制代码
公开数据源 / BYOK 数据源
  ├─ OpenSky / adsb.lol / AISStream / CelesTrak
  ├─ USGS / NASA FIRMS / Launch Library 2
  ├─ TomTom / Google Maps / Open-Meteo / TfL / City Open Data
  └─ 本地打包数据:datacenters、dams、submarine cables、Natural Earth
              │
              ▼
Vite dev/preview server 中间件
  ├─ 同源 API 代理:/api/opensky、/api/tomtom、/api/cctv...
  ├─ 服务端持有私钥:OpenAI、AISStream、OpenSky OAuth
  ├─ 缓存与 serve-stale:成功响应复用,失败时保留清晰状态
  └─ SSRF / allowlist / request cap / redacted debug log
              │
              ▼
前端数据层
  ├─ DataLayerManager:注册、启停、周期刷新、失败归一
  ├─ 各图层模块:flights、traffic、cctv、satellites...
  ├─ detection / label arbiter / HUD / contacts
  └─ share link state registry
              │
              ▼
Cesium 视图层
  ├─ Google Photorealistic 3D Tiles 或 Cesium globe fallback
  ├─ Entity / Primitive / PostProcessStage / 3D models
  ├─ cockpit / tracking / scene director
  └─ URL 可分享视图、键盘、语音和点击交互

控制平面比数据平面更难。用户的一个动作可能同时影响镜头、图层、HUD、分享链接和后台刷新。DataLayerManager 用每个图层独立的 toggleChain 串行化相对开关,用 visibilityIntentEpoch 表示最新绝对意图,用 AbortController 取消旧生命周期任务。源码注释里提到过一个真实故障:两次快速 toggle 会让 enable 还没完成时 disable 已经进入,最后可能留下两个轮询定时器,导致 OpenSky 429。现在的实现把检查、启用、首次 update、定时器安装放进同一条 per-layer 队列里。

text 复制代码
用户/语音/分享链接请求
        │
        ▼
setEnabled(layer, target)
        │
        ├─ 生成 intentEpoch
        ├─ 取消旧 active intent
        ├─ 进入该图层 toggleChain
        │
        ├─ guard: 可见性是否被当前模式阻止
        ├─ init: 第一次初始化图层资源
        ├─ params: 应用待生效参数
        ├─ enable/update: 首次刷新必须成功才落地
        ├─ arm interval: 清掉旧 interval 后再安装新 interval
        └─ notify: 通知 UI、检测层、分享状态和 render governor

渲染平面则围绕 Cesium 做了几层取舍。入口里先设置 Google Maps API key,然后尝试创建 Google Photorealistic 3D Tiles;如果失败,回退到 Cesium globe。默认帧率限制到 60 FPS,隐藏标签页时关闭默认 render loop,跟踪实体时再持有连续渲染。对地图类应用来说,这些小动作很实在:地图不是游戏,120Hz 空转没有太多意义,尤其是同时挂着轮询、后处理和大量标签时。

项目还有一层"诚实呈现"的架构:

机制 源码/文档证据 作用
图层状态归一 src/data/manager.jslayerFeedState() 避免把 stale、fallback、unavailable 混成一个绿灯
数据授权拆分 DATA_SOURCES.md 源码 MIT 不等于第三方数据可随便商用
私钥代理 SECURITY.mdvite.config.js OpenAI、AISStream、OpenSky OAuth 不进浏览器 bundle
客户端可见 key 标注 SECURITY.md Google Maps、Cesium ion 需要限制 referrer / assets scope
性能边界 docs/PERFORMANCE.md 把硬件、浏览器、对象数和样本条件写出来
测试覆盖 scripts/run-unit-tests.mjs 与 154 个 src 测试文件 大量测试集中在相机、图层、语音、检测、数据源失败路径

本次审计在 macOS 环境下用 Node v22.22.3 执行了依赖安装和单元测试。npm ci 能完成,但 npm 按 package.json 给出 EBADENGINE 警告,因为项目声明要求 Node 24.14 或 26。npm run --silent test 实际跑出 2,587 个通过用例,另有 2 个 Node 24 校准的 allocation microbenchmarks 因 Node 22 被跳过。这个结果说明单测主体可跑,但正式运行仍应按项目声明切到 Node 24/26。

📖 README 核心内容摘要

README 的叙事很强,但把营销语气剥掉后,核心信息其实很清楚:God's Eye View 是一个浏览器里的 3D 地球应用,把公开空间信号统一成可交互图层。它不要求账号体系,最低体验只需要 Google Maps API key;OpenAI、TomTom、OpenSky OAuth、AISStream、FIRMS 等能力按需开启。

最短配置长这样:

env 复制代码
GOOGLE_MAPS_API_KEY=你的 Google Maps API key
# 可选:用于语音控制
OPENAI_API_KEY=你的 OpenAI API key
# 可选:用于 live traffic
TOMTOM_API_KEY=你的 TomTom key
# 可选:用于船舶 AIS
AISSTREAM_API_KEY=你的 AISStream key

README 里把数据能力分成三类:🟢 不需要 key,🟡 免费 key,🔴 计费 key。真正必须的入口是 Google Maps,因为 photorealistic 3D tiles 依赖它;没有 OpenAI key 时,应用仍可运行,只是麦克风会提示语音不可用;没有 TomTom key 时,交通层用标注清楚的模拟模式;没有某些上游源时,图层会显示 partial、delayed、simulated 或 unavailable。

它的设计哲学可以总结成四句话:

README 里的功能 工程含义
Cockpit view 把 Cesium 相机绑定到动态实体,持续更新位置、朝向和附近信号
Contacts 在目标周围做 250 km 范围内的邻近对象列表,支持快速切换跟踪目标
Click-to-track anything 点击事件进入统一 focus/request 管线,不让每个图层私自抢镜头
Voice whiteboard 语音命令输出世界坐标标注、边界、多边形和路线,而不是只生成聊天文本
Share Links URL 保存镜头、风格、图层和目标,恢复时需要重新验证 live target 是否还存在

集成层面,项目依赖并不多。核心运行依赖是 Cesium、satellite.js、Mapbox vector tile、pbf、mgrs 和 EGM96 高程工具;开发依赖包含 Vite、vite-plugin-cesium、Puppeteer、Sharp 和 ws。相比很多全栈项目,它更像一个重前端加 Vite 中间件的实时可视化实验室。

🚀 快速上手

项目 README 推荐 Node.js 24.14.x 或 26.x,package.json 也用 engines 明确约束。下面的命令采用本次审计核验过的路径:git clone 已实际执行,npm ci 已完成安装,npm run dev -- --host localhost --port 4173--host--port 参数来自 Vite 6.4.3 的 --help 输出。

bash 复制代码
git clone https://github.com/bilawalsidhu/gods-eye-view.git
cd gods-eye-view
cp .env.example .env
# 编辑 .env,至少填写 GOOGLE_MAPS_API_KEY
npm ci
npm run dev -- --host localhost --port 4173

启动后打开:

text 复制代码
http://localhost:4173

如果只想先看代码,不建议一上来就把服务暴露到局域网。SECURITY.md 写得很直白:Vite server 是 key broker,任何能访问它的人都可能消耗你的 OpenAI、Google、OpenSky、AISStream、TomTom 或 FIRMS 配额。默认绑定 localhost 是合理的;如果要 HOST=0.0.0.0,最好先加自己的认证代理和上游平台预算限制。

最小工作路径可以按这个顺序试:

步骤 期望结果 需要 key
GOOGLE_MAPS_API_KEY 并启动 看到 photorealistic 3D globe 或 fallback globe Google Maps
打开 Flights 看到 OpenSky 或 adsb.lol 来源的航班点位与状态 可匿名,OAuth 可增强
点击一架飞机 相机跟随,出现 metadata、trail 和 cockpit 入口 不额外需要
打开 Satellites ISS 等目标按 TLE 推算轨道 不额外需要
打开 Traffic 无 TomTom key 时显示模拟;有 key 时走 live flow tiles TomTom 可选
开启语音 浏览器向 /api/realtime/token 获取短时 token OpenAI 可选

📊 增长速度与社区热度

2026-08-28 Trending 快照记录 God's Eye View 位列 #1,Stars 9,291,Forks 1,988。同日稍后的 GitHub API 读数为 Stars 9,305、Forks 1,990,所以只能说两次观察之间增加了 14 Stars 和 2 Forks;这不是完整自然日新增。项目创建于 2026-06-22,到 2026-08-28 约 67 天,按快照 Stars 粗算,生命周期平均约 138.7 Stars/天。这个数只能作为长期基线,不能代表当天增长速度。

社区数据需要拆开看。GitHub API 的 open_issues_count=86 同时包含 issue 和 pull request;Search API 拆分后,open issues 为 56,open PRs 为 30,closed issues 为 5,closed PRs 为 3。近 7 天 API 读到 2 个 commit,近 30 天 4 个 commit,提交作者字段显示为 Bilawal Sidhu。contributors endpoint 在本次读取中只返回 1 个具名贡献者,不能据此推断所有匿名或 squash 历史。

指标 数值 说明
Trending rank #1 2026-08-28 快照
快照 Stars 9,291 pre-run snapshot
快照 Forks 1,988 pre-run snapshot
同日 API Stars 9,305 后续补充核验
同日 API Forks 1,990 后续补充核验
Fork/Star ratio 21.4% 1,988 / 9,291
生命周期 Stars/天 约 138.7 从 2026-06-22 到快照日粗算
Open issues 56 Search API 拆分,不含 PR
Open PRs 30 Search API 拆分
测试规模 2,587 pass 本次在 Node 22 环境执行;2 个 Node 24 allocation microbenchmarks 跳过
正式 Release 0 GitHub Releases 暂无条目

完整 Trending 榜单如下。榜单顺序来自 2026-08-28 快照;除 #1 的快照 Stars 已保存外,其余 Stars、语言来自同日 GitHub API 补充读取;今日新增 Stars 未在快照中保留。

Rank Repository Language Stars 今日新增
1 bilawalsidhu/gods-eye-view JavaScript 9,291 未保留
2 zedeus/nitter Nim 13,996 未保留
3 freestylefly/awesome-gpt-image-2 JavaScript 23,668 未保留
4 tt-a1i/archify JavaScript 24,791 未保留
5 JetBrains/go-modern-guidelines Go 2,328 未保留
6 anthropics/claude-plugins-official Python 34,787 未保留
7 K-Dense-AI/scientific-agent-skills Python 35,547 未保留
8 DietrichGebert/ponytail JavaScript 114,515 未保留
9 calesthio/OpenMontage Python 52,718 未保留
10 rohitg00/ai-engineering-from-scratch Python 50,357 未保留
11 ConardLi/garden-skills CSS 11,444 未保留
12 thedotmack/claude-mem JavaScript 92,397 未保留
13 google/googletest C++ 39,086 未保留
14 AgriciDaniel/claude-obsidian Python 14,179 未保留
15 marin-community/marin Python 2,756 未保留
16 ComposioHQ/awesome-claude-skills Python 73,721 未保留
17 actions/checkout TypeScript 8,756 未保留
18 OpenCut-app/OpenCut TypeScript 87,593 未保留
19 TauricResearch/TradingAgents Python 101,423 未保留

🎯 适用场景

场景 适合程度 原因
Cesium 3D 地球学习 有真实图层、后处理、相机跟随、Google 3D Tiles fallback 和性能文档
实时数据平台原型 Vite 代理、缓存、状态归一、图层生命周期和 serve-stale 都有可读实现
OSINT 教学演示 中高 使用公开信号,且把 live、estimated、simulated、unavailable 分开标注
自托管个人探索工具 中高 默认 local-first,最小配置只需要 Google Maps key
商业态势产品直接复用 源码 MIT,但 OpenSky、TeleGeography、Google、TomTom、TfL 等数据条款要单独处理
高可靠生产监控 低到中 SECURITY.md 明确说不是 hardened production service;需要认证、审计、SLO 和配额治理
离线 GIS 系统 核心体验依赖在线数据源和 Google/Cesium 生态
移动端 App 直接迁移 当前实现是浏览器 + Vite + Cesium,移动端适配不是主线

💡 总结

God's Eye View 最吸引人的地方是视觉效果,但它真正能留下来的价值在工程层:多源数据的失效语义、图层启停的事务化、相机归属的统一控制、公开数据授权边界、以及有条件说明的性能基线。它不适合被包装成"开箱即用的全球实时情报平台",也不该被拿来做未经授权的数据再分发。

如果你在做地图、态势大屏、三维可视化或 agent 控制真实 UI 的实验,这个仓库值得读。先看 src/main.jssrc/data/manager.js,再看 vite.config.jsDATA_SOURCES.mdSECURITY.mddocs/PERFORMANCE.md。README 能让你知道它想做什么,源码才会告诉你它为了不说谎付出了多少工程成本。

相关推荐
简创AIGC陶先生1 小时前
第1章:项目全景与架构总览
github
怕浪猫1 小时前
ZCode 周末送额度活动开启:3 亿 Token 免费领取
github
P1Browser2 小时前
指纹浏览器安全吗?从浏览器环境隔离、数据存储到安全风险解析
网络·tcp/ip·安全·网络安全·github·php
todoitbo5 小时前
用蓝耘元生代做 GitHub 热榜解读:Dify Chatflow 接入和真实项目分析
ai·github·api·dify·蓝耘
猫头虎5 小时前
GitHub 入门教程:如何加入并为开源项目贡献代码
gitee·开源·gitlab·github·开放原子·开源协议·gitcode
樱花落木兰5 小时前
Git 超全零基础教程|三区原理、全套命令、分支协作、冲突解决、IDEA 集成(面试必备)
ide·git·json·github
OpenCSG7 小时前
CSGHub:开源、用户反馈后企业版转社区版,持续开源
开源
TunerT_TQ7 小时前
IBM |css-gridish 源码分析:4 个 JavaScript 文件背后的 CSS Grid 可视化工具
开源·github·资讯
TunerT_TQ7 小时前
Hugging Face| Candle 源码分析:702 个文件背后的 Rust 深度学习框架架构
开源·github·资讯