技术栈
地图渲染架构
地图使用针对每个平台优化的混合渲染策略: 桌面(deck.gl + MapLibre GL):- WebGL 加速图层可平滑处理数千个标记
- MapLibre GL 提供底图瓦片(OpenStreetMap)
- GeoJSON、散点图、路径和图标图层用于不同数据类型
- 基于 GPU 的聚类和拾取以实现响应式交互
- SVG 渲染以节省电池
- 减少标记数量和简化图层
- 触摸优化的交互,更大的命中区域
- WebGL 不可用时自动降级
关键库
- deck.gl:高性能 WebGL 可视化图层
- MapLibre GL:开源地图渲染引擎
- D3.js:SVG 地图渲染、缩放行为(移动端备选)
- TopoJSON:高效的地理数据编码
- ONNX Runtime:基于浏览器的 ML 推理
- 自定义 HTML 转义:XSS 防护(DOMPurify 模式)
不使用外部 UI 框架
整个 UI 是手工制作的 DOM 操作,不使用 React、Vue 或 Angular。这使得包体积小(gzipped 后约 250KB),并提供对渲染性能的精细控制。构建时配置
Vite 在构建时注入配置值,启用自动版本同步等功能:
这确保显示的版本始终与发布的包匹配,无需手动同步。
安装
WorldMonitor 有三种设置路径,具体取决于你要做什么。1. 仅应用本地开发
运行 Vite 仪表盘,无需环境变量。可选的 API 密钥(见下文)可解锁额外的图层和数据源。npm run dev:tech、dev:finance、dev:commodity、dev:happy 和 dev:energy。
2. 贡献者 / 完整代码生成开发
当你修改.proto 合约或重新生成客户端时需要。需要 Go 1.21+(用于 buf CLI 和 sebuf protoc 插件)以及 Node.js 22+。
.proto 文件时,在构建或推送之前运行 make generate — 如果生成的输出与提交的文件不一致,CI 的 proto-check.yml 会失败。完整的 proto 工作流请参见添加端点。
3. 自托管 Docker 栈
完整的自托管栈(仪表盘 + Railway 式中继 + Redis + 种子脚本)需要 Node.js 22+、Docker 或 Podman,以及没有安全默认值的密钥 —RELAY_SHARED_SECRET、REDIS_PASSWORD 和 REDIS_TOKEN 必须在 docker compose up 之前设置。完整的操作步骤请参见仓库中的 SELF_HOSTING.md 指南。
API 依赖
仪表盘从各种公共 API 和数据源获取数据:可选 API 密钥
某些功能需要 API 凭证。没有它们,相应的图层会被隐藏:
仪表盘在没有这些密钥的情况下也能完全运行。受影响的图层只是不会显示。核心功能(新闻、市场、地震、天气)无需配置。
项目结构
api/*.js 代理已被 proto 生成的领域网关取代。完整的请求路径请参见架构文档。
数据归属
本项目使用来自以下数据源的数据。请尊重其使用条款。飞机追踪
数据由 The OpenSky Network 提供。如果你在出版物中使用此数据,请引用:Matthias Schafer、Martin Strohmeier、Vincent Lenders、Ivan Martinovic 和 Matthias Wilhelm。“Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research”。载于《第 13 届 IEEE/ACM 传感器网络信息处理国际研讨会(IPSN)论文集》,第 83-94 页,2014 年 4 月。
冲突与抗议数据
- ACLED:武装冲突位置与事件数据。来源:ACLED。数据必须根据其归属政策进行归属。
- GDELT:事件、语言和语调全球数据库。来源:The GDELT Project。
金融数据
- 股票报价:由 Finnhub 提供(主要),Yahoo Finance 作为指数和大宗商品的备份
- 加密货币:由 CoinGecko API 提供
- 经济指标:数据来自 FRED,圣路易斯联邦储备银行
地球物理数据
- 地震:美国地质调查局,ANSS 综合目录
- 自然事件:NASA EONET — 地球观测自然事件追踪器(风暴、野火、火山、洪水)
- 天气警报:国家气象局、ECCC 与 WMO SWIC — 官方警报合并进同一
weather:alerts:v1源
基础设施与交通
- 机场延误:FAA 空中交通管制系统指挥中心
- 船舶追踪:AISstream 实时 AIS 数据
- 互联网中断:Cloudflare Radar(CC BY-NC 4.0)
其他来源
- 预测市场:Polymarket
致谢
最初的仪表盘概念受 Reggie James(@HipCityReg)启发,感谢他对综合态势感知工具的愿景。 特别感谢 Wingbits 的 Yanal 提供 API 访问权限以获取飞机增强数据,从而实现军用飞机分类和所有权追踪。 感谢 @fai9al 的启发和原始 PR,促成了 Tech Monitor 变体。限制与注意事项
本项目是一个概念验证,展示使用公开数据可能实现的功能。虽然可用,但存在重要限制:数据完整性
某些数据源需要付费账户才能获得完整访问:- ACLED:免费层有 API 限制;编程访问需要研究层
- OpenSky Network:有速率限制;商业层提供更高配额
- 卫星 AIS:全球覆盖需要商业提供商(Spire、Kpler 等)
AIS 覆盖偏差
船舶图层使用通过 AISStream.io 的陆地 AIS 接收器。这造成了地理偏差:- 覆盖较强:欧洲水域、大西洋、主要港口
- 覆盖较弱:中东、开阔海域、偏远地区
被封锁的数据源
某些发布商封锁来自云提供商(Vercel、Railway、AWS)的请求:- 来自某些媒体的 RSS 源可能因 403 错误而失败
- 这是常见的反机器人措施,不是仪表盘的 bug
- 受影响的源通过熔断器自动禁用
许可证
World Monitor 采用 GNU Affero General Public License v3.0 (AGPL-3.0-only) 许可。当你遵守其 copyleft 和源代码可用条款时,AGPL 允许商业使用。对于私有源代码或定制合同条款,可另行获取商业许可作为替代选项。完整详情请参见许可证页面。作者
Elie Habib为态势感知和开源情报收集而构建。
