使用 Next.js 和 Valyu API 构建的交互式地缘政治事件地图
我最近发现了一个有趣的项目叫做 globalthreatmap。作者构建了一个交互式指挥中心,用于实时监控全球地缘政治、军事基地和事件。如果你曾经沉迷于冲突地图仪表板,或者对 OSINT 工具感兴趣,这个项目一定会引起你的注意。

为什么需要这个项目
将分散的国际事件新闻整合成统一的视图一直是个难题。通常你需要监控数十个 Telegram 频道、新闻聚合器和数据库。
仓库作者决定在一张深色 Mapbox 地图上可视化这个信息流。结果是一个仪表板,地缘政治事件与坐标绑定、分类,并附带每个国家的历史背景。

项目功能
主屏幕展示一个交互式地图和事件订阅源。让我们来分解一下界面中的所有结构:
- 交互式地图带聚类功能。缩小时事件点会自动聚合。还有热力图模式和全球自动漫游功能。
- 军事基地图层。美国基地(绿色标记)和北约设施(蓝色标记)被标注在地图上。点击会弹出卡片,显示设施名称、类型和所在国家。
- 点击国家查看历史背景。在地图上选择一个国家,应用会调出两个列表:当前冲突和历史战争,包含日期和结果。
- 实体档案。你可以输入组织、私人军事公司或政治人物名称,生成深度分析报告,支持结构化 CSV 导出和 PowerPoint 演示文稿。

一个有趣的细节:在生成分析时,项目故意排除了 Wikipedia 作为搜索来源,依赖通过 Valyu Answer API 获取的外部新闻摘要和报告。
架构与技术栈
从技术角度来看,这个项目代码整洁且现代化。底层采用了全新的技术栈:
- Next.js 16 配合 App Router 作为应用基础
- Mapbox GL JS 和 react-map-gl 用于矢量地图渲染
- Tailwind CSS v4 用于界面样式
- Valyu API(客户端
valyu-js)用于事件搜索、答案生成和深度研究 - Zustand 用于客户端地图状态管理
- Zod 用于验证传入的数据模式
应用支持两种运行模式:自托管(使用你自己的 API 密钥完全自主部署)和通过 Valyu OAuth 的授权模式。
目录结构遵循标准的 Next.js 模式:
globalthreatmap/
├── app/
│ ├── page.tsx # Главный дашборд
│ └── api/ # Роуты для событий, отчетов и баз
├── components/
│ ├── map/ # Компоненты карты и модалок
│ ├── feed/ # Лента событий
│ └── search/ # Поиск по сущностям
├── lib/
│ ├── valyu.ts # Интеграция с Valyu API
│ └── geocoding.ts # Извлечение геокоординат
└── stores/
└── map-store.ts # Стейт карты в Zustand
本地部署指南
你需要 Node.js 18+ 以及 Mapbox 和 Valyu 服务的 API 密钥才能开始。可选地,你可以添加 OpenAI 密钥以实现更准确的文本地理位置提取。
克隆仓库并安装依赖:
git clone https://github.com/unicodeveloper/globalthreatmap.git
cd globalthreatmap
npm install
在项目根目录创建 .env.local 文件:
NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
VALYU_API_KEY=your_valyu_api_key_here
NEXT_PUBLIC_APP_MODE=self-hosted
# Опционально: улучшенный парсинг локаций через OpenAI
OPENAI_API_KEY=your_openai_api_key_here
启动本地开发服务器:
npm run dev
之后即可通过 http://localhost:3000 访问界面。
思考与总结
这个项目作为使用 React 构建复杂地理界面的现成示例很有意思。如果你计划开发自己的事件追踪器、基础设施监控仪表板或 OSINT 分析工具,可以在这里找到使用 Mapbox GL 和前端状态管理的有用模式。
需要注意的是:通过深度研究生成详细的 50 页档案需要 5 到 10 分钟,因为 API 会查询数百个来源。但对于初步的事实收集任务,这是一个完全可行的选择。源代码采用 MIT 许可证开源,你可以自由地将地图和地理编码模块用于自己的项目。
相关项目