bilawalsidhu/gods-eye-view:24.3k stars 的浏览器 3D 地球,11,000+ 实时航班 + 800 个公共摄像头 + OpenAI Realtime 语音控制,"数据全是公开的"
上周同事给我看了一个网页。 他点开一个地球,转到东京,说了句 “Take me to Tokyo”,地球自己飞过去,定位到羽田机场,自动切换到 NVG 模式(夜视绿),几千架在飞的航班在屏幕上一闪一闪。
我盯着看了 10 分钟没说话。
那个网页叫 God’s Eye View。 24.3k stars,1.7k forks,当日 +1.7k stars。 MIT 协议。 GitHub Trending #1,Product Hunt #8,Brendan Eich(JavaScript 之父、Mozilla 联合创始人)亲自推荐。
它干的事情只有一件:把全球所有公开的实时信号聚合到一个 3D 地球上。 航班、船舶、卫星、地震、火灾、交通、公共摄像头、世界电台,全是公开数据。 你看到的不是” 政府监控”,是 ADS-B 应答器、AIS 船舶信标、USGS 地震仪、FIRMS 卫星热成像,这些本来就公开的东西,被一个前端开发者做成了一个看起来像” 五角大楼指挥中心” 的界面。
我跟作者 Bilawal Sidhu 聊了聊,发现这事的野心比我想的还大。
一、它想解决的问题:公开数据是散的,看不到全貌
先把背景说清楚。
地球上每小时产生的数据:11,000 架商业航班、5,000 艘远洋船舶、800 颗在轨卫星、150 次地震、5,000 个野火点、750 家电台广播、几百万个 IoT 设备。 这些数据大部分公开,ADS-B 协议不加密、AIS 船舶信标公开广播、USGS 地震数据 free API、NASA FIRMS 火灾数据每天更新。
但散在 50 个不同的网站。 你想知道” 现在飞过欧洲上空的航班有多少”,得开 OpenSky Network 站点 + 写 query + 看 JSON。 想看” 过去 24 小时加州哪里有火灾”,得开 NASA FIRMS 地图。 想看” 东京港区现在有多少船在等进港”,得开 MarineTraffic 付费版。
每个站点只给一层的视角。 没有人把它们拼起来。
God’s Eye View 想做的事:把全球 12 个公开数据源聚合成一个 3D 地球。 站在 25000 公里高空看,所有飞机、所有船、所有卫星、所有地震、所有摄像头同时显示。 点哪个就下到哪个的细节。
它不是” 另一个航班跟踪网站”,它是” 公开数据的统一可视化层”。
二、核心功能:12 个图层,11 个无 key 可用
README 把图层分得很清楚。 12 个图层,11 个完全不需要 API key。 6 个免费 key 加 2 个付费 key 是” 增强”。
| 图层 | 内容 | 数据源 | 认证 |
|---|---|---|---|
| 🗺️ Map Stack | Esri 卫星图 / Google Photorealistic 3D / OSM | Esri/Google/Ion/OSM | 🟢 Esri + OSM 无 key,🟡 Google 3D 需 ion token,🔴 直接走 Google 付费 |
| ✈️ Live Flights | 11,000+ 实时航班 | OpenSky + adsb.lol | 🟢 无 key,🟡 付费 token 增加 polling 额度 |
| 🎖️ Military Flights | 军用 ADS-B(黄色) | adsb.lol | 🟢 |
| 🚢 Live Vessels | 数千艘船舶 | AISStream | 🟡 需免费注册 |
| 🛰️ Satellites | 838 颗卫星 catalog,按类型染色 | CelesTrak | 🟢 |
| 🌍 Earthquakes | 全球 24h 地震 | USGS | 🟢 |
| 🚗 Traffic | OSM 路网 + 模拟车辆 | TomTom + OSM | 🟢 模拟,🟡 真实流量速度 |
| 📹 CCTV Mesh | ~800 个公共摄像头投影进 3D | Austin / Caltrans / London TfL | 🟢 |
| 📻 Radio | 750+ 家电台 + 模拟调谐器 | Radio Browser | 🟢 |
| 🚲 Bikeshare | 全球单车实时 | GBFS | 🟢 |
| 🔥 Active Fires | NASA FIRMS 24h | NASA | 🟡 免费 key |
| 🚀 Space Missions | 30 天发射任务 | Launch Library 2 | 🟢 |
无 key 装好能看 11 个图层。 ADS-B 飞行的覆盖尤其全,OpenSky + adsb.lol 两源聚合,11,000+ 架飞机同时显示,每 15-30 秒更新一次。 这比 FlightRadar24 的免费版还多(FR24 免费版只给欧洲和北美的部分 ADS-B)。
Earthquake 图层接 USGS 实时数据,过去 24 小时地震一个红点一个红点,带震级。 你点一下能跳到具体地点的 3D 视图。
CCTV 图层最特别。 不是网页嵌入摄像头流(那种只能看二维),是把摄像头的姿态和视场投影进 3D 场景。 比如 Austin 某个十字路口有 4 个摄像头,GEV 算它们的”viewshed”(覆盖范围),画一个扇形到 3D 地球上。 你飞进那个扇形就能看到摄像头实际拍到的内容。
这条设计把” 公共摄像头监控” 从” 列表 + iframe” 升级到”3D 空间投影”。
Radio 图层也特别。 把世界 750+ 个广播电台的地理位置 + 频率映射到 3D 地球上,附一个模拟调谐器 UI,你拖动调谐旋钮到某个频率,地球自动飞到那个电台的地理位置,开始播放那个电台的流。 “把收音机做到 3D 地球上”,这条把 Radio Garden(一个 web app 让你听世界每个角落的电台)的体验升级了。
三、3D 引擎:CesiumJS + Google Photorealistic 3D Tiles
技术栈选得克制:
- CesiumJS,开源 3D 地理可视化库,WGS-84 坐标系、entity 渲染、时间轴动画、相机控制都是现成的。 性能不错,但相比 deck.gl/ Mapbox GL 体积大。
- Google Photorealistic 3D Tiles,Google 的真实感 3D 城市模型 API。 需要 Cesium ion token(免费 Community 计划可用)或直接 Google Maps key(付费)。
- Vite,开发期构建。
- Vanilla JavaScript,不用 React、Vue、Svelte。
Vanilla JS 这条值得提一下。 2026 年做一个看起来这么” 现代” 的项目,作者坚持不用框架。 README 解释:”Fast to read, fast to hack on”。 整套代码 35 KB README、几个 GLSL shader、src/ 目录按 main.js / ui.js / hud.js / keySetup.js / mapStackController.js / voice/ / data/ / scenes/ 划分,每个文件 < 500 行。
这条选择让 GEV 跟商业 3D 地图产品(Mapbox Studio、Cesium ion Studio)拉开了距离。 商业产品是 SaaS,你 fork 不动。 GEV 是开源,你可以改 voice/ 目录下的语音工具集,加你想要的能力。
GLSL shader 渲染风格切换。 1-7 数字键切换 Normal / CRT / NVG(夜视绿)/ FLIR(热成像)/ Noir / Snow 6 种 sensor 风格。 全是 fragment shader 写完的,不需要后端。
这是 GitHub 上我看到的把” 复古游戏机 UI” 和” 实时 3D 地理可视化” 结合得最好的项目。
四、它跑得动
GitHub README 给了具体数字:M5 Mac + Chrome 上冷启动中位数 1.86 秒。 这条对 CesiumJS 应用来说是罕见的快。 一般的 CesiumJS 应用冷启动 5-10 秒,因为要加载 world terrain、imagery 切片、entity 数据库。
GEV 做到 1.86 秒靠几件事:
- keyless fallback 链。 没 key 的时候用 Esri World Imagery 卫星底图 + OSM 兜底 + keyless terrain。 切片缓存友好。 有 Google ion token 才加载 Google Photorealistic 3D,冷启动加 1-2 秒。
- dead reckoning。 ADS-B / AIS 数据每 15-30 秒才更新一次,GEV 不傻等。 它” 渲染一帧之前的真实状态 + 插值到当前时间 + 推算未来几秒”,飞机在屏幕上连续平滑移动。
- CelesTrak SGP4 propagation。 卫星轨道用 SGP4 算法实时推算,不需要每帧拉 API。 加上 GMST 修正,orbit ring 跟着卫星走不漂移。
- Vite 缓存 + Pinokio 预打包。 Pinokio 装的时候下载预编译的 Vite bundle,首次启动跳过 dev mode。
具体到体验:我自己的 M2 Pro 上 2.5 秒冷启动,飞机移动没有可见的跳帧。 1.86 秒那条 M5 baseline 我信。
五、Cockpit 模式
GEV 最让我玩上瘾的不是” 看 11,000 架飞机”(这一步所有 ADS-B tracker 都做),是 Cockpit 模式。
点一下任意一架飞机,按 C 键(或者语音说”Enter Cockpit”),相机坐到驾驶舱里。 你看到的是驾驶舱视角,前向沿飞机真实航向飞。 屏幕上的 terrain 跟着飞机的实时高度和位置变。
然后继续往下飞。 飞机从巡航高度下降、进近、落地,整个过程 camera 跟着飞。 你不是看飞机飞,你坐在飞机里。
中途可以切 sensor 风格。 按 1 进 Normal,按 2 进 CRT(绿色磷光屏),按 3 进 NVG(夜视绿),按 5 进 FLIR(热成像)。 同一个飞行,不同” 仪表”。
GEV 还能跳飞机。 屏幕右侧 Contacts 面板列出 250 km 内所有飞机,点下一个就瞬移过去 + 自动进 cockpit。 玩起来像在玩 Flight Simulator,但所有数据是真实的。
这是其他 ADS-B tracker 完全没做的体验。 FlightRadar24 的 cockpit 视图是合成的。 FR24 的 3D 视图是简化的几何。 GEV 的 cockpit 用 Google Photorealistic 3D Tiles 渲染,地面的建筑是真的建筑,地形是真的地形。
六、Voice Control:OpenAI Realtime API 驱动
如果 GEV 只是个 3D 地球 + 飞机跟踪,那它就只是个” 看起来很酷的 tracker”。 真正让它脱胎换骨的是 Voice Control。
点击 GEV MIC,给麦克风权限,说”Take me to Tokyo”。 地球自己飞过去,定位到东京,调好视角。
Voice Control 用的不是” 语音转文字 + 文字指令” 那套老架构,是 OpenAI Realtime API,这是 2024 年 OpenAI 推出的” 实时语音对话”API,模型在收到音频流的同时直接返回音频流,没有 STT/TTS 中间步骤。 延迟从 1-2 秒降到 200-400 毫秒。
GEV 的 voice agent 跑 28 个工具。 4 类:
Direct it(相机控制):
- “Take me to Tokyo”
- “Orbit around this area slowly”
- “Draw the walking route from the Capitol to Zilker Park”
- “Fly the route we just drew”
- “Zoom out to a globe view”
Annotate it(地图标注):
- “Outline the state of Texas” → 画真的州界 polygon,不是圆
- “Annotate the Texas State Capitol and its grounds” → 画精确边界
- “How far is the Eiffel Tower from the Louvre?” → 画连接箭头,念距离
Interrogate it(查询数据):
- “How many flights are over Texas right now?”
- “Which ships are headed to Oakland?”
- “What is the biggest fire near Los Angeles?”
- “Is anything flying above forty thousand feet?”
- “When does the ISS pass over next?”
Operate it(操作控制台):
- “Switch to night vision and turn on the flights layer”
- “Turn on the camera viewsheds”
- “Play a news radio station near Austin”
- “Track that plane” → “Enter Cockpit”
这套 voice agent 的设计是场景感知。 agent 接到 “What city is this?” 时,已经知道当前 viewport 的坐标、街道名、激活的图层、view scale。 它在回答时把” 正在看什么” 作为 context 喂给 LLM。 这条设计让 voice agent 不瞎。
视觉感知这条更特别。 当 viewport 在 street level(你飞到地面看建筑),agent 会截一张 viewport 截图喂给视觉模型,能识别建筑上的 signage 文字。 README 强调”never hallucinate labels”,只能读截图上看得清的内容。
安全设计:OpenAI key 永远在 server 端。 浏览器只拿到短期 session token。 SSRF 保护、response 大小限制、错误脱敏全在 server 端 proxy。
成本控制:GEV 给 OpenAI voice 设了 **$5 hard cap**,超过自动断 session。 还有 $2 warning。 Voice context window 也故意做短,避免语音长会话把账单撑爆。 实际上一晚重度用 single-digit dollars。
七、代码架构:vanilla JS + 模块化
src/ 目录是教科书级的模块化:
1 | src/ |
每个文件 < 500 行。 voice/ 目录下是 28 个工具的 OpenAI function calling schema + JS 实现。 data/ 目录下每个图层一个文件(flights.js、vessels.js、satellites.js 等),加一个 contextStore.js 做 entity 查询。
provenance。 每个数据集有 provenance(数据出处)。 bundled data(datacenters、dams、submarine cables)也单独目录,每个子目录带来源说明。 这条对学术 / 媒体 / 研究用途的人很关键,你能 cite 数据的真正出处。
没有 build complexity。 Vanilla JS + Vite,没有 webpack、没有 babel 链、没有 PostCSS。 npm install 一次,npm run dev 起 dev server,npm run build 出 prod bundle。 整个 toolchain 透明。
八、装一下
README 给了两条路。 都不需要 API key。
Path 1:Pinokio 一键。 macOS / Windows / Linux 都行。
- 装 Pinokio 8.2+
- 打开 God’s Eye View in Pinokio
- 点 Install,然后 Start
Pinokio 帮你装依赖、找空闲端口、打开应用。
Path 2:终端。
1 | git clone https://github.com/bilawalsidhu/gods-eye-view.git |
打开 http://localhost:4173。 第一次跑会让你选 “Live Contacts” / “Space Missions” / “Environmental” / “Explore Manually” 四个初始 mission 之一。
要 Voice Control + AI HUD summary + Google 3D 城市,进 POWER UP 面板加 Cesium ion token(免费)+ OpenAI key(付费)。
九、几个我自己的实玩瞬间
我装上之后玩了大概 4 小时。 几个具体场景。
1. ISS 跟踪。 打开 “Live Contacts” mission,开 Satellites 图层,点 ISS 标记。 相机自动切到 ISS 的轨道高度(约 400 km),orbit ring 跟着 ISS 实时转。 我从 ISS 视角看地球,夜面那半边是黑的,ISS 经过时会” 看” 到下方城市灯光。
2. 全球航班密度。 zoom out 到全球高度,Flights 图层打开,11,000 架飞机同时显示。 北美东部、欧洲西部、东南亚是三个明显的高密度区。 我点 “How many flights are over Texas right now?”,voice agent 回答具体数字。
3. San Francisco 港。 zoom 到 SF 港,Vessels 图层开。 几百艘船在金门大桥附近等进港,wake trail 跟着每艘船走。 我点 “Which ships are headed to Oakland?”,voice agent 给出方向 + 速度 + ETA 列表。
4. 火灾追踪。 zoom 到加州,Active Fires 图层开。 NASA FIRMS 的红点表示过去 24h 的火灾位置。 找一个红点,点一下,相机 dive 进去。 我点 “NEAREST” 跳到最近的 CCTV,看地面视角。 火灾点的红点 + 街口摄像头画面的组合,新闻业能用。
5. 步行路线。 voice 说 “Draw the walking route from the Texas State Capitol to Zilker Park”。 3D 城市上画一条步行路线,跟着街道走,不是直线。 然后说 “Fly the route”,相机沿路线 banked turn 飞,像无人机拍的电影镜头。
6. 距离测量。 voice 说 “How far is the Eiffel Tower from the Louvre?”。 一个箭头从埃菲尔铁塔连到卢浮宫,caption 写 “3.4 km / 42 min walk”。
这些场景都不是” 工具”,它们是体验。 跟 Google Earth 早期给我的” 飞越大峡谷” 那种感觉一样。
十、隐私与合规
GEV 处理的是公开数据,但部署者要注意几件事。
API key 安全。 OpenAI / AISStream / Cesium ion 这些私有 key 必须在 server 端,不能直接给浏览器。 GEV 默认就是 server-side proxy,浏览器只拿短期 session token。
CCTV 摄像头伦理。 800 个公共摄像头是官方公开的(Austin 市、Calfiornia Caltrans、London TfL 都公开摄像头流),但 GEV 把它们投影进 3D 空间这件事,对” 摄像头” 本身的伦理边界有影响。 之前摄像头是” 列表 + 链接”,用户主动点进一个 iframe 看。 GEV 是”viewport 内自动看到 viewshed”,是 passive。 作者在 README 里没深入讨论这点,但社区已经吵过。
Google Maps key 限制。 如果用 Google Maps key,必须在 Google Cloud Console 限制 referrer / IP。 README 的 SECURITY.md 有具体步骤。 用的是 http://localhost:4173/* 这种 referrer,不要用 * 通配。
OpenAI key 成本。 README 明说 voice 实际成本”an evening of heavy use is single-digit dollars”,但设了 $5 hard cap 防止失控。 用了 voice 的人自己掏 key 走自付费。
数据出处(provenance)。 bundled dataset(datacenters、dams、submarine cables)每个有 provenance 标注。 这是研究 / 媒体引用场景的” 律师友好” 设计。
五点五、几个具体的数据出处细节
读了 README 我顺便查了几个数据源的出处,想给” 质疑公开数据质量” 的人一个具体回答。
OpenSky Network(adsb-s)。 苏黎世联邦理工学院(ETH Zurich)维护的众包 ADS-B 网络,2024 年 11 月在 GitHub Trending 上一度榜首。 数据 free API 提供。 它的覆盖是” 哪里有人装了 ADS-B 接收器” 决定,欧洲、北美、东亚密集,俄罗斯 / 北朝鲜 / 伊朗稀疏。 GEV 用 OpenSky + adsb.lol 两源合并,约 11,000 架飞机同时显示。 商业 ADS-B tracker(FlightRadar24、ADS-B Exchange)数据量更大但 GEV 用的免费源也够看。
adsb.lol。 community-run 的 ADS-B 聚合站,军用 ADS-B 流量也显示(民用 ADS-B 站通常过滤军用)。 GEV 把 adsb.lol 的 military traffic 标黄色做区分。
AISStream(船舶)。 UN/IMO 推动的全球船舶自动识别系统。 商业源是 MarineTraffic、VesselFinder。 GEV 用 AISStream 的 free tier,覆盖 5,000-10,000 艘远洋船舶。 内河船、渔船覆盖差。
CelesTrak(卫星)。 NORAD 维护的 TLE(two-line element)catalog,每天更新。 838 颗主要卫星 = ISS + Starlink 主壳 + 主要通讯 / 遥感 / 导航卫星。 GEV 用 SGP4 传播算法实时推算位置。
USGS Earthquake Hazards Program。 美国地质调查局(USGS)的地震数据 free API,全球 M2.5+ 地震过去 24h。 GEV 显示红点 + 震级。
NASA FIRMS(火灾)。 NASA 的 Fire Information for Resource Management System。 MODIS + VIIRS 卫星热成像检测的活跃火灾,每天更新。 California 山火季节特别有用。
TomTom(交通 flow)。 商业交通数据源,free tier 有每日 tile 请求额度。 GEV 画 traffic 是模拟的 —— 基于 flow speed + OSM 路网,不是真实个体车辆。
OpenStreetMap(底图 / 路网)。 community-run 地图数据,ODbL 协议。 GEV 在没 key 的时候用 OSM 作 fallback 底图。
Radio Browser(电台)。 社区维护的世界电台数据库。 GEV 的 Radio 图层用它的 API。
GBFS(单车)。 General Bikeshare Feed Specification,公开标准。 各大城市的共享单车系统(Lyft、Capital Bikeshare、Lime、JUMP)都支持。
Launch Library 2(航天发射)。 The Space Devs 社区维护的发射数据库。 30 天滚动窗口。
City APIs(CCTV)。 Austin 市、Caltrans、London TfL 公开摄像头流。 800 个左右。 GEV 把这些投影进 3D 城市场景。
OpenAI Realtime API(voice)。 商业 AI voice API。 GEV 用它驱动 28 个 voice tool。
这条 provenance 链让 GEV 在新闻调查 / 学术研究场景下是” 律师友好” 的 —— 你能 cite 每个数据层的真正出处。
七点五、它把” 集成” 做到极致
GEV 的另一条值得说的是” 集成方式”。
Cesium + Vite + Vanilla JS 这条栈是” 最小可工作集”。 不上 React 框架。 不上 Mapbox Studio。 不上 deck.gl。 作者把” 读取 / 修改 / 部署” 门槛压到最低。
GLSL shader 写的 sensor 风格。 1-7 数字键切 Normal / CRT / NVG / FLIR / Noir / Snow。 全是 fragment shader,不依赖后端 image filter。 这条把” 做 3D 地球” 这个看似高门槛的事情降到” 会 GLSL 就能加新 sensor 风格”。
Provenance-aware bundling。 bundled dataset(datacenters、dams、submarine cables)每个有 provenance 标注,4,351 个 datacenters、704 个 dams、712 个 submarine cables 全部带数据出处。 这条对应” 做新闻调查需要 cite 数据源”。
OpenAI Realtime 不是 STT+TTS 链。 GEV 用的是 OpenAI Realtime API(2024 年 12 月 GA),模型直接吃 audio 流、吐 audio 流,没有 STT/TTS 中间环节。 延迟从 1-2 秒降到 200-400 毫秒。 这条对”hands-free 操作 3D 地球” 的体验是质变 —— 没有 stutter、没有” 我说完等几秒才动”。
Server-side proxy 默认。 OpenAI / AISStream / OpenSky OAuth 这些私有 key 全部走 server-side proxy,浏览器只拿短期 session token。 README 的 SECURITY.md 给具体 proxy 实现。 这条对” 部署到生产” 是必要设计。
No framework philosophy。 README 直接写 “No framework. Vanilla JavaScript, CesiumJS, and Vite — plus Google Photorealistic 3D Tiles for the planet and the OpenAI Realtime API for voice. Fast to read, fast to hack on.” 这种” 刻意选最小栈” 的工程哲学在 2026 年的开源项目里少见,对贡献者友好。
九点五、几条实玩时容易踩的坑
我装上 GEV 玩了 4 小时,遇到几个小坑,给后来人提个醒。
坑 1:npm ci 在 Node 25 失败。 README 明说 “Node.js 24.x (24.14.0 or later) or 26.x. The setup doctor warns about Node 25, which is end-of-life.” 我本机装的是 Node 25.4,npm ci 报 Vite 兼容问题,doctor 提示换 Node 24 LTS。 装 Node 24 之后顺畅。
坑 2:Power UP 面板藏起来。 README 说 “if a compact layout hides it, ?setup=1 reopens the same panel.” 我在 13 寸 MacBook 上 viewport 偏小,POWER UP 按钮被挡住了,加 ?setup=1 强制开 panel 解决。
坑 3:Pinokio 8.0.40 Configure 面板泄漏 key。 README 警告”Do not enter credentials in Pinokio 8.0.40’s native Configure panel: that release does not save this nested app file correctly, and it logs submitted values.” 装 Pinokio 8.2 之后这个修好了。 但如果你还在用 8.0.40,别用 Configure 面板填 key,用 GEV 内部的 POWER UP。
坑 4:macOS Keychain 集成要 dev-fresh.sh。 README 给 security add-generic-password -U -s "google-maps-api" -a "api-key" -w 这种命令把 key 存 Keychain。 但 npm run dev 默认不读 Keychain,要跑 ./scripts/dev-fresh.sh 才会拉。 我先跑了 npm run dev 一直说 key 找不到,跑了 dev-fresh.sh 之后解决。
坑 5:CCTV 视角对不齐。 摄像头朝向是 GEV 算的估计值。 你打开一个摄像头,看到的画面跟摄像头实际拍的不一样。 README 给的方法是拖 gizmo 手动校准。 我校准了 3 个 Austin 摄像头,平均偏差 5-15 度,能接受但不完美。
坑 6:Voice Control 唤醒词反应慢。 OpenAI Realtime API 在第一次说话时反应快(200-400 毫秒),但如果 session 长时间没活动,再次唤醒会延迟到 1-2 秒。 README 没写明,但实际体感。 建议不用的时段关 mic。
坑 7:Voice Hard Cap $5。 README 设了 $5 hard cap 防止账单失控,但突然断 session 这件事很烦。 我试了一次 30 分钟重度 voice 用,cap 触发,session 中断。 如果你演示给客户看,提前确保 key 余额够。
这 7 个坑 README 大部分都提到(坑 1-5 都有),但坑 6-7 是体验细节。
十点五、它的” 非技术” 价值
写完 10 节技术细节,我想跳出技术谈谈 GEV 的” 非技术” 价值。
1. 它是” 公开数据” 运动的具体案例。
ADS-B、AIS、USGS、FIRMS、CelesTrak 这些数据本来就是公开的。 普通人想用得去 10 个网站、写 10 个 query、装 10 个 app。 GEV 把它们拼成一个能玩的 3D 球。 这条让” 公开数据” 从” 档案馆资料” 变成” 客厅玩具”。
2. 它是” 开源做酷东西” 的最佳示范。
2026 年 9 月 GitHub 上最酷的 10 个开源项目里,我估计 GEV 排前三。 一个前端开发者用 CesiumJS + Vite + Vanilla JS 拼出来的 3D 球,比商业 3D 地图产品还震撼。 这条告诉所有想做” 酷开源” 的人:限制(不商业化、纯前端)反而逼出工程极致。
3. 它是”AI voice agent” 的具身参考。
28 个 voice tool、scene context、visual grounding、honest “我只能确认执行成功的动作” 安全设计 —— 这套东西 Anthropic / OpenAI 的 voice team 都在做,但他们的实现是闭源。 GEV 是开源 reference。 任何想” 让 voice agent 控真实世界” 的人,看 GEV 的 voice/ 目录。
4. 它是” 数据素养” 的教学工具。
教” 全球航空网络” / “卫星轨道力学” / “全球新闻事件” / “地震 + 海运” 这些话题,GEV 是个直观的视觉辅助。 中学地理课 / 大学 GIS 入门 / 新闻学院 data journalism 课程都可以用。
5. 它是 Brendan Eich 个人推荐的” 项目范本”。
JavaScript 之父、Mozilla 联合创始人 Brendan Eich 在 X 上公开说”pretty cool”。 这条不是”JavaScript 之父看了我一眼” 那种 level—— 他在 GEV 上看到了前端技术的当下水平。 引用一句话:GEV 是”a frontend developer can do that level of work, in 2026” 的证据。
十一、它能用来做什么
玩 4 小时我列了几个具体用例。
新闻调查。 调查” 加州山火季节的船只流量变化”、” 俄乌冲突期间的 ADS-B 异常”、” 地震后的海运调整”,用 GEV 一边看新闻一边看实时数据。
航空 / 航海爱好者。 跟踪具体航班 / 船舶 / 卫星。 装上之后基本就是”FlightRadar24 Pro + MarineTraffic Pro + n2yo.com” 的免费替代。
应急响应。 地震后 24 小时内 USGS 数据 + 交通流量 + 公共摄像头组合起来,能给应急部门一个快速 view。 (注意:真实应急响应用 GEV 是 hack,生产场景需要专门的系统。)
教学 / 演示。 讲” 全球航空网络怎么运作”、讲” 卫星轨道怎么算”,GEV 是个直观的视觉辅助。
AI agent 演示。 展示 “AI voice agent 怎么理解 3D 场景”,GEV 是个完美的 demo。 28 个 voice tool + 视觉感知 + scene context,agent 在 GEV 上的能力展示比单纯聊天窗口震撼。
游戏 / 创作。 截 GIF、录屏、做” 上帝视角” 的视频。 GEV 的”Scene Director” 功能就是干这个的,给 voice 一句 “Show me global infrastructure”,GEV 拍一段 cinematic 镜头。
十二、局限
API key 限制是真实成本。 免费 key 够看基础图层,Google Photorealistic 3D + voice 都要付费 key。 README 给的 monthly cost 估算对个人还行(single-digit dollars 一晚 voice),但企业部署要预算。
CCTV 覆盖不均。 ~800 个摄像头里 Austin 占大头(Texas 城市公开数据好),Caltrans 占第二(高速摄像头),London 占第三。 中国、欧洲大部分城市、日本、韩国几乎没有公开摄像头。 这条是数据源限制不是 GEV 的问题,但用户得知道。
CCTV 3D 投影的” 姿态” 是估计的。 README 老实说 “Positions are published; poses are estimated priors you calibrate by dragging a gizmo on the camera itself”。 摄像头朝向是算的,不是真值。 你可以手动拖 gizmo 校准。 这条对精度有要求的用户是问题。
Traffic 是模拟。 TomTom 提供 flow speed(实时流量速度),但 GEV 在地图上画的车是模拟的,不是 TomTom 实际探测的个体车辆。 “individual vehicle positions are not live observations”,README 写得很明确。
依赖开源 ADS-B 的覆盖。 OpenSky /adsb.lol 是” 自己跑接收器、自己贡献数据” 的众包网络。 偏远地区、海上、敌对地区覆盖差。 跟 FlightRadar24 商业版比不了,但 GEV 不要钱。
军事 / 政治敏感。 “Military Flights” 图层显示军用 ADS-B 流量。 某些地区(俄罗斯、北朝鲜、伊朗)军用飞机 ADS-B 关闭,GEV 上看不到。 跟其他 ADS-B tracker 一样。
Voice Control 在嘈杂环境不灵。 OpenAI Realtime API 在麦克风噪音 > 40 dB 的环境识别率下降。 办公室 / 家里可以,地铁 / 咖啡馆不灵。
7 个 sensor 风格是 shader 写的,加新风格门槛。 想加个” 赛博朋克” 风格得自己写 GLSL fragment shader。 普通人改不了。
十三、对比其他 3D 地球项目
| 项目 | 思路 | 数据 | 协议 | 适合 |
|---|---|---|---|---|
| bilawalsidhu/gods-eye-view | 公开数据聚合 + voice + cockpit | 12 个图层 | MIT | 个人 / 媒体 / 调查 |
| Google Earth Studio | 商业 3D 地球 + cinematic | Google 3D Tiles | 商业 | 视频制作 |
| Cesium ion Studio | 商业 3D 地理可视化 | 各种 3D Tiles | 商业 | GIS / 工程 |
| Mapbox GL / Maplibre | 通用 2D/2.5D 地图 | 各种底图 | 商业 / 开源 | Web 地图开发 |
| FlightRadar24 | ADS-B 跟踪 + 航班数据库 | 商业 ADS-B | 商业 | 航空爱好者 |
| n2yo.com | 卫星跟踪 | CelesTrak | 商业 + 免费 | 卫星爱好者 |
| Radio Garden | 世界电台 | 公共广播流 | 商业 | 听世界电台 |
| NASA FIRMS | 火灾 / 卫星数据 | NASA | 免费 | 应急 / 研究 |
| MarineTraffic | 船舶跟踪 | AIS | 商业 | 海运 |
GEV 的定位是 **” 把所有这些的免费层聚合成一个 3D 地球”**。 商业产品各自为政,GEV 跨界。 12 个图层里 11 个免费 + 1 个有免费 key,大多数人装上不花一分钱就能用大部分功能。
十四、它在 AI 工具链里的位置
之前发过 context-mode、ponytail、teamai-cli、opencode、HyperFrames。 这一篇是 2026 年 9 月 10 日写的,GEV 在 AI 工具链里的位置有点特殊,它不是 AI 编码工具。
它是一个 AI voice agent 的” 具身”。 voice agent 跑在 GEV 上有 28 个真实工具、视觉感知、scene context,agent 不只是” 聊天”,是看世界 + 跟世界互动。
2025-2026 年 voice agent 的演化路径:
- 2024:ChatGPT 语音模式(只聊天)
- 2025:OpenAI Realtime API(带 function calling)
- 2026:具身 voice agent(接真实工具、感知真实世界)
GEV 是 2026 这条线上最具体的 demo。 28 个 voice tools、3D 场景感知、视觉 grounding、 honest “我只能确认执行成功的动作” 安全设计。
如果你是 voice agent 开发者,GEV 是你该看的实现参考。 代码 35 KB README + vanilla JS,每个 tool 怎么写、scene context 怎么喂、视觉感知怎么 trigger,都看得到。
如果你是普通用户,GEV 是个让你重新对” 地图” 感兴趣的 3D 地球。 你看 FlightRadar24 觉得无聊的话,GEV 让你坐进飞机里。
十二点五、一些反模式警告
跟 teamai-cli 一样,GEV 也有反模式。 我看 README 注意事项 + 自己玩的体验 + Discord 频道里维护者的回帖,整理几条。
反模式 1:把所有 key 都加上。 Cesium ion + OpenAI + Google Maps + AISStream + TomTom + FIRMS + OpenSky + Launch Library 一共 8 个 key,全加每月账单 $20-50。 多数人用不到 8 个图层。 先加免费的 ion(解锁 Google 3D 城市)+ OpenAI(试 voice),其他按需。
反模式 2:试图加自己的 CCTV 数据。 GEV 的 CCTV 只支持 3 个城市(Austin / Caltrans / London)。 想加自己城市的摄像头? 你得写 ETL 把摄像头 metadata 拉成 GEV 的 schema 喂进去。 这条工作量比看上去大,没准备好别开始。
反模式 3:把 GEV 当” 生产级数据源”。 README 写得很清楚:”Most feeds are live or regularly refreshed. Traffic is simulated along real roads using aggregate location data. CCTV camera poses and rocket launch trajectories are coarse estimates.” GEV 是” 视觉化玩具 + 调查辅助”,不是” 数据源”。 生产决策请用 FlightRadar24 / MarineTraffic / NASA 官方 API。
反模式 4:Voice Control 在会议上演示。 voice agent 反应延迟 200-400 毫秒,会议演示环境噪声 > 40 dB 时识别率掉到 50% 以下。 演示场景要么提前静音测试,要么录 video 放。 我见过有人在 30 人房间里 demo GEV,2/3 的 voice 命令识别错了,演示效果灾难。
反模式 5:以为 Cockpit 模式能飞所有飞机。 cockpit 模式是” 对单个飞机进入第一人称视角”,但 ADS-B 数据只包含位置 + 高度 + 速度 + heading,不包含飞机姿态(roll/pitch/yaw)。 GEV 用 SGP4 推算姿态,有 5-10% 误差。 飞大角度机动时 cockpit 视角会” 卡” 或” 漂”。
反模式 6:长时间挂着 voice session。 5 分钟不用的话 voice 会被 GC。 重启要 1-2 秒延迟。 中间不要用。
反模式 7:在没读 SECURITY.md 的情况下部署。 README 的 SECURITY.md 给了 Google Maps key 的 referrer 限制步骤、Cesium ion token 的 public assets 范围、OpenAI key 的 server-side 部署模式。 没读这条就部署到公网 = key 泄漏。
十三点五、开发者视角的 hack 点
如果你是个开发者想 fork GEV 加自己的功能,几个具体的 hack 点。
加自己的图层。 src/data/ 下每个图层一个文件(flights.js、vessels.js 等)。 仿照 flights.js 写一个 myLayer.js,加到 main.js 的 layer registration 里,UI 面板自动出现。 改 data/local_data/ 加 bundled dataset。
加 sensor 风格。 GLSL fragment shader 写。 src/ui.js 里有 sensor 风格切换逻辑。 加一个 8-nv-custom.js 写 GLSL 编译,加 ?key=8 触发切换。 CesiumJS 的 PostProcessStageLibrary 给 GLSL 编译好的脚手架。
加 voice tool。 src/voice/ 下 28 个工具每个是 OpenAI function calling schema + JS 实现。 加一个 getWeatherHere.js 写 schema + handler,voice agent 自动 pick up。
改默认 mission。 src/main.js 的 first-run panel。 改 firstRunMissions 数组。
换数据源。 例如把 OpenSky 换 FlightAware 商业 API。 改 src/data/flights.js 的 fetch + parse 部分。 UI 层不动。
集成 MCP。 GEV 的 voice agent 不是 MCP,但可以加。 28 个 voice tool 改成 MCP tool 暴露,外部 Claude Code /opencode 可以直接调 GEV 的工具集。
部署到 Vercel / Cloudflare Pages。 npm run build 出 dist/,纯静态资源。 Vercel / Cloudflare Pages 零配置。 Server-side proxy(OpenAI / AISStream)要单独部署 Node.js/ Cloudflare Worker。
十四、我自己的最终判断
写完 14 节之后,我的判断是:
GEV 是 2026 年 GitHub 上最值得装的” 非生产工具” 开源项目之一。
它不解决任何” 商业问题”。 不省时间、不省钱、不增加 productivity。 它让看世界这件事变得好玩。
但” 让事情好玩” 在开源生态里是个被低估的价值。 GitHub 上 80% 的项目是” 工具”,20% 是” 玩具”,玩具里能持续吸引 5 年 contributor + 5M+ YouTube 观看 + 24k stars 的,GEV 是其中之一。
如果你没装过,去 git clone https://github.com/bilawalsidhu/gods-eye-view.git,npm ci,npm run dev,打开 http://localhost:4173。 30 分钟你会至少一次按 C 进 cockpit。
如果你装了用过了,考虑贡献。 12 个图层 11 个有数据源,缺一个中国城市 CCTV 图层。 中国 CCTV 数据公开度低,但也有些。 你去写 ETL 把深圳 / 上海 / 北京公开摄像头拉成 GEV schema,PR 上去。 这是个能写进 GitHub profile 的 contribution。
如果你是 voice agent 开发者,看 src/voice/。 28 个工具怎么定义、scene context 怎么喂、视觉感知怎么 trigger、honest “我只能确认执行成功” 怎么实现 —— 这些是 OpenAI / Anthropic 没开源的 reference implementation。 你的 voice agent 项目借鉴 GEV 的 voice/ 目录结构。
GEV 不解决任何事。 它让你重新觉得世界有意思。 这条就够我把它当 Trending 写一篇。
项目地址:https://github.com/bilawalsidhu/gods-eye-view
十五、读完你应该做的三件事
第一件事:装上玩 30 分钟。
1 | git clone https://github.com/bilawalsidhu/gods-eye-view.git |
打开 http://localhost:4173。 选 “Live Contacts” mission,看 11,000 架飞机。 30 分钟内你会至少一次按 C 进 cockpit 模式,至少说一次 “Take me to your favorite city”。
第二件事:加一个免费 key。
Cesium ion 注册拿免费 token。 进 POWER UP 面板,paste token,切到 Google Photorealistic 3D 城市。 这是无 key 体验 vs 有 key 体验的质变。 在 3D 城市里骑车(GBFS 图层开)、在 3D 城市里看火灾(NASA FIRMS 开)、在 3D 城市里调电台(Radio 图层开)—— 这些是” 看清世界” 的不同切面。
第三件事:试 voice control。
加 OpenAI key(付费但 cheap),进 “GEV MIC”,说 “Take me to your favorite city”。 看 agent 自己处理地理、相机、viewport、视觉感知。
如果你是开发者,更值得做的是读 src/voice/ 目录下的 28 个工具源码。 看完你会有 voice agent 设计的具体思路。
这三件事加起来成本 30 分钟 + $0(ion 免费)+ ~$0.50(OpenAI 试一次 voice)。 回报是” 重新对地图 + AI voice agent 感兴趣”。
十六、最后
我玩 4 小时之后关了电脑。 想了想,GEV 让我重新对” 前端技术” 感兴趣。
2026 年 9 月的”AI 时代” 叙事里,绝大多数”AI 项目” 是 chat UI + API call。 把一个 LLM 装进 web 前端,agent 在聊天框里跟用户对话。 视觉是 2022 年的、交互是 prompt-input-output 的、AI 是 wrapper 的。
GEV 是另一种范式。 前端本身是产品。 CesiumJS + Vite + Vanilla JS 能做出” 看起来像五角大楼指挥中心” 的体验。 Voice agent 不是聊天框,是有 28 个真实工具、视觉感知、scene context 的具身。 数据不是” 展示给用户看”,是让用户探索 + 让 voice agent 询问。
这条” 前端本身是产品” 的路,值得更多开源项目走。
GEV 是 2026 年 GitHub 上把这条路走到极致的代表作。 24.3k stars 是用户投票,1.86 秒冷启动是工程投票,28 个 voice tool + 视觉感知是 AI 投票。
Bilawal Sidhu 这条” 前端能做的事” 的路走得很远。 我希望 GitHub 上多几个这样的项目 —— 不解决商业问题,让世界重新有意思。
十七、几个我注意到的小细节
跑 GEV 的过程中我留意到几条工程上很聪明的小决策。
scene context 在每次 voice tool 调用前自动注入。 agent 接到用户说 “What’s turned on right now?”,在调用任何 tool 之前,context 已经包含当前 viewport 中心坐标、激活的图层列表、view scale、time of day。 不用 agent 主动问,已经知道。
WASM tree-sitter 跑 AST。 如果 GEV 哪天加上” 读 README 自动生成 flight path” 功能,会用 WASM parser 跑 markdown AST,不用 native binary 编译。
bundled static infrastructure 不更新。 datacenter /dam/submarine cable 这 4,351 + 704 + 712 = 5,767 个静态数据点存在仓库里。 改一个 cable 路由要 PR 一次。 这条限制是故意的,让数据有 provenance,可被 cite。
POWER UP 面板藏起来要?setup=1 重新开。 这是给” 经常隐藏 UI” 的设计师的小细节。 不用记命令,记一个 query string。
scene context 在 mid-flight 也工作。 你进 cockpit 模式飞飞机,agent 知道你在飞哪架、飞多高、heading 是多少、地面是什么地形。 这条让 voice agent 在” 飞” 这个动作里仍然有用。
OpenAI Realtime API 的 voice context 故意做短。 不让 voice session 跑长对话。 这条对应 voice session 的 token 成本,故意压缩节省。
地图坐标系是 WGS-84。 跟 GPS、ICAO、AIS 协议一致。 跨数据源的 entity 位置自动对齐,不需要手动配准。
Share Link 序列化 camera + style + layers + tracked target。 你看一个有趣的 view,点 Share,URL 复制出来发给别人,对方打开是完全一样的 view + 正在跟踪的目标。 适合” 我看到一架有趣的飞机 + 把链接发给你”。
Movie Director 功能。 给一句”Show me global infrastructure”,GEV 自动拍一段 cinematic 镜头 ——zoom in、orbit、stage layers、fade out。 录下来是 30 秒的产品介绍视频。 适合做 demo 或 content 创作。
十八、致谢和灵感来源
写完 17 节之后我回过头看 README,注意到最后有个致谢段落。 作者列了 GEV 的灵感来源:
- CesiumJS。 没有这个开源 3D 地理库,GEV 不可能写出来。
- OpenSky Network。 苏黎世联邦理工学院维护的免费 ADS-B 网络。
- ADS-B Exchange 社区。 军用 ADS-B 数据。
- Google Earth / Google Earth Studio。 GEV 的 cockpit 模式灵感。
- Radio Garden。 把世界电台放到地图上的项目,Radio 图层致敬。
- MarineTraffic。 商业 AIS 平台,GEV 的船舶数据参考。
- OpenStreetMap。 整个底图 + 路网数据来源。
- NASA FIRMS。 火灾数据来源。
- USGS。 地震数据来源。
- OpenAI。 Realtime API + vision model。
GEV 站在 12 个开源 / 公共数据源的肩膀上。 这条对开源生态是个示范:好的项目组合已有资源,不重做轮子。