VrushankPatel/godseye

GitHub: VrushankPatel/godseye

Godseye 是一个纯前端的地理空间 OSINT 可视化平台,在 3D 地球上叠加全球实时数据图层,无需后端即可运行。

Stars: 5 | Forks: 4

# Godseye 1.0

启动 Godseye

Godseye 1.0 interface preview

纯前端地理空间情报仪表盘,灵感来源于 WorldView 风格的 OSINT 界面。
实时 3D 地球仪、战术 HUD、监控叠加层、CCTV 推流、卫星、地震活动、空域等。

## Vibe Coding 声明 该项目由我亲自架构。 我使用 **Codex** 作为编程助手,协助完成了部分实现任务,例如 UI 脚手架搭建、布局生成、迭代重构以及加速开发。 ## 核心亮点 - 全屏交互式 3D 地球仪 (CesiumJS) - 战术 HUD UI,带有实时数据计数器和 UTC 录制时钟 - 动态视觉模式:Default、NVG、FLIR、CRT、Anime、God Mode - 实时图层 (可切换): - 飞行器 (OpenSky,持续更新) - 卫星 (CelesTrak + 浏览器传播) - CCTV (市政和精选的全球直播流) - 全球机场基础设施图层 (OurAirports 大型/中型/定期航班机场) - 地震活动 (USGS) - 全球地震台站网络图层 (IRIS FDSN 台站元数据,活跃网络覆盖) - 自然灾害 (NASA EONET 实时事件:风暴、野火、火山、洪水) - 全球灾难警报 (GDACS:地震、气旋、洪水、干旱、火山、野火) - 全球冲突/战争图层 (Wikidata SPARQL,带有地理编码的近期持续性武装冲突) - 海事图层 (WFP 全球港口 + 配置 API key 后的 AISstream 实时船只) - 电网图层 (US DOE ODIN 停电情报 + WRI 全球发电厂基础设施) - 天气图层现包含严重警报叠加层 (NOAA/NWS 监视、警告、咨询) - 实时海洋浮标遥测 (NOAA NDBC:风、波浪、气压、气/水温) - 全球火山活动警报 (Smithsonian/USGS 带地理标签的每周活动推送) - 太空天气极光强度地图 (NOAA SWPC 全球 Ovation 概率网格) - METAR 台站情报 (机场观测包含 IFR/MVFR/VFR 类别) - 全球活跃火灾探测 (NASA FIRMS MODIS 热点,过去 24 小时) - 航空危险多边形 (AIRMET/SIGMET 对流、颠簸、结冰、IFR 区域) - 太阳耀斑活动图层 (NOAA SWPC GOES X 射线耀斑事件) - 全球天气状况 (Open-Meteo 密集的世界网格 + 印度精细化网格) - 全球空气质量情报 (Open-Meteo AQI + 全球主要节点的 PM2.5/PM10/NO2/O3) - 交通流动画 + 交通摄像头点位 - 军事活动 (实时军用级 ADS-B 航迹) - 军事基地 (NTAD + OSM 全球军事设施数据源) - 带有 restriction 元数据的禁行/禁区 - 空域 / 限制区 - 带有元数据和媒体预览的对象检查面板 - 飞行过滤控件 (运营商 / 货运 / 客运模式) - 优化的响应式玻璃面板 HUD (防止在拥挤的屏幕上发生数据重叠) ## 技术栈 - React + Vite - CesiumJS - Tailwind CSS - Zustand (状态管理) - 浏览器 `fetch` + timer/WebSocket 风格的轮询模式 ## 访问模式 Godseye 采用 BYOK 模式:Bring Your Own Key (自带密钥)。 - 直接在 [https://godseye-x.web.app/](https://godseye-x.web.app/) 使用托管版本 - 如果你想在本地运行或自行托管,请为下面列出的需要密钥的集成服务提供你自己的 API key ## BYOK 密钥 如果你想获得完整的本地/自托管体验,请在 `scripts/local-secrets.sh` 中提供这些密钥。 - `VITE_GOOGLE_MAPS_3D_KEY` 或 `VITE_GOOGLE_MAPS_API_KEY` 放大时显示 Google 逼真 3D 城市切片 - `VITE_YOUTUBE_API_KEY` 用于发现 YouTube 实时 CCTV / 摄像头 - `VITE_GUARDIAN_API_KEY` 用于情报专线中丰富 Guardian 新闻内容 - `VITE_AISSTREAM_API_KEY` 用于海事图层的 AISstream 实时船只追踪 - `VITE_FIREBASE_RTDB_URL` 用于 Godseye 变化缓慢的数据的共享加密 runtime cache endpoint - `VITE_GODSEYE_CACHE_SECRET` 用于加密/解密共享 RTDB cache payload 的客户端 cache envelope secret 如果缺少某个密钥,Godseye 不会崩溃。 它会在浏览器控制台记录一条错误日志,说明缺少该密钥,并且相关数据可能不可用。 ## 本地运行 ### 环境要求 - Node.js 18+ - npm 9+ ### 安装并启动 ``` cp scripts/local-secrets.example.sh scripts/local-secrets.sh # 填写你的 keys npm install ./scripts/with-local-secrets.sh npm run dev ``` 打开 `http://localhost:5173/`。 ### 构建 ``` ./scripts/with-local-secrets.sh npm run build ./scripts/with-local-secrets.sh npm run shared-cache:publish ./scripts/with-local-secrets.sh npm run preview ``` ### 数据源审计 (基于 curl) ``` ./scripts/feed_audit.sh ``` 这会运行直接的 API 检查,并按数据源/区域打印实时记录数,以帮助验证真实世界的覆盖率。 详细的研究说明在 [`docs/FEED_RESEARCH.md`](./docs/FEED_RESEARCH.md) 中。 ## 共享 Runtime Cache Godseye 可以选择使用由 Firebase Realtime Database 支持的共享加密 runtime cache。 此缓存旨在用于变化较慢的共享数据面,例如: - 实时情报专线 / 中继源 payload - 已验证的 CCTV 清单数据 - 卫星目录 / TLE 清单 payload 它不用于高度易变的实时位置图层(例如飞机或实时船只移动),在这些情况下,直接从数据源刷新仍然更有意义。 配置完成后,应用程序将: - 尝试首先读取共享的 RTDB 缓存 - 验证自定义完整性哈希 - 根据缓存时间戳检查是否在 90 分钟的新鲜度窗口内 - 如果缓存仍然新鲜,则从该缓存水合 Godseye - 当缓存缺失、过期或无效时,重建并重新发布缓存 - 可以在 CI 或本地操作期间使用 `npm run shared-cache:publish` 预热加密缓存 存储在 RTDB 中的 payload 在上传前会在客户端进行加密,并在运行时在客户端进行解密。 用于开发/调试时,浏览器控制台会在引导流程中输出详细的共享缓存日志。 ## 项目结构 ``` src/ components/ constants/ layers/ shaders/ store/ workers/ ``` ## 数据源 (公开) - OpenSky Network (`/api/states/all`) - CelesTrak TLE 数据集 - ADSB.lol 镜像 (`/v2/point`,无密钥 ADS-B 流镜像) - OurAirports 全球机场注册表 (`airports.csv`) - USGS 地震 GeoJSON 数据源 - IRIS FDSN 台站数据源 (`fdsnws/station`),用于全球地震网络位置 - NASA EONET 公开事件数据源 - GDACS 全球灾难警报数据源 - Wikidata SPARQL endpoint (带有坐标的近期持续性武装冲突) - NOAA/NWS 活跃天气警报数据源 (`api.weather.gov/alerts/active`) - NOAA NDBC 最新浮标观测 (`latest_obs.txt`,通过代理支持浏览器 CORS) - Smithsonian GVP / USGS 每周火山活动 RSS (`WeeklyVolcanoRSS.xml`,georss 点位) - NOAA SWPC 极光模型网格 (`ovation_aurora_latest.json`,全球概率网格单元) - NOAA AviationWeather METAR API (`/api/data/metar`,区域拉取 + 代理后备) - NASA FIRMS MODIS 全球 24 小时活跃火灾 CSV (直接接入 + 代理故障转移接入) - NOAA AviationWeather AIRSIGMET API (`/api/data/airsigmet`,多边形危险叠加层) - NOAA SWPC GOES X 射线耀斑数据源 (`xray-flares-7-day.json`,按等级分类的事件) - Open-Meteo 当前天气 API - Open-Meteo 空气质量 API - 公开/公共市政及精选的全球摄像头直播流 - 公开的地理空间交通/空域数据集 - WFP 全球港口 ArcGIS FeatureServer (公开的全球海事基础设施点位) - AISstream WebSocket 数据源 (可选密钥),用于实时船只位置 - US DOE ODIN 实时县级停电数据源 - WRI 全球发电厂数据库 (全球基础设施基线) - NTAD 军事基地 (ArcGIS 公共图层) - OpenStreetMap Overpass 军事/土地利用数据源 (`military=*`, `landuse=military`),通过打包的全球快照 (`/public/data/osmMilitarySites.json`) - 精选的全球禁行/限制位置数据集 (公开记录的排除/保护区) - IRIS FDSN 事件数据源后备 (`service.iris.edu`) - NASA TV / ISS 直播流 ## 军事活动数据说明 - 此应用程序中的实时军事活动来自公开的 ADS-B 航迹,并在客户端进行过滤/分类 (军用呼号/运营商/类型启发式算法)。 - 许多冲突/事件 API 需要账户身份验证或密钥 (例如 ACLED),因此此版本保持了默认体验无密钥且纯前端化。 - 冲突图层使用公开的 Wikidata 条目,应将其视为 OSINT 背景信息,而非权威的军用级别情报。 ## 数据源韧性 - 卫星启用了多源后备机制 (多个 CelesTrak 组 + 分页 TLE 后备 API)。 - 地震数据采集首先使用 USGS 数据源,如果 USGS 不可用,则回退到 IRIS 文本数据源解析。 - CCTV 数据采集优先考虑支持实时流/嵌入的源;如果某个源仅提供静态图像,则将其视为后备模式。 - 每个图层独立故障,并显示 `FEED OFFLINE` 状态,而不会导致其他图层崩溃。 ## 注意事项 - 本项目刻意不设后端:无服务器、无数据库、无身份验证。 - 由于 CORS 限制、区域封锁、数据源停机或第三方速率限制,某些数据源可能会间歇性失效。 - 当某个数据源不可用时,应用程序会优雅降级,并保持其他图层处于活跃状态。 - 本地密钥通过 `scripts/local-secrets.sh` 加载,该文件已被 gitignored。 - GitHub Actions 构建使用仓库密钥来实现相同的密钥集成。 - 如果没有 `VITE_GOOGLE_MAPS_3D_KEY` / `VITE_GOOGLE_MAPS_API_KEY`,地球仪将回退到 OSM 3D 建筑(如果可用)。 ## 致谢 由 **Vrushank Patel** 用 ❤️ 构建 ## 许可证 基于 Apache License 2.0 授权。详见 [LICENSE](./LICENSE)。
标签:3D地球, HTTP/HTTPS抓包, 地理空间可视化, 实时数据监控, 开源情报(OSINT), 态势感知, 数据可视化仪表盘, 自定义脚本