ThePublicServant/globalthreatmap
GitHub: ThePublicServant/globalthreatmap
这是一个开源情报指挥中心,通过交互式地图实时可视化全球安全事件和威胁指标,帮助用户进行威胁评估和冲突分析。
Stars: 0 | Forks: 0
# 全球威胁与事件情报地图
一个实时的全球态势感知平台,可将安全事件、地缘政治动态和威胁指标绘制在交互式地图上。可将其视为一个开源情报(OSINT)指挥中心。



[](https://railway.com/deploy/open-source-intelligence-command-center?referralCode=yuv1Gy&utm_medium=integration&utm_source=template&utm_campaign=generic)
## 功能特性
### 核心功能
- **实时事件映射** - 在世界地图上以颜色编码的威胁等级标绘突发新闻事件(冲突、抗议、自然灾害)
- **交互式 Mapbox 地图** - 暗色主题地图,支持聚合、热图可视化和平滑导航
- **事件信息流** - 可按类别和威胁等级过滤的全球事件实时信息流
- **情报档案** - 为任何实体构建情报档案,包括深度研究报告、CSV 数据导出和 PowerPoint 简报
- **警报系统** - 配置基于关键词和区域的警报,并接收实时通知
### 国家情报
点击任何国家以查看详细的冲突情报:
- **历史冲突** - 纵观历史的战争、军事交战和冲突,包括日期、对抗方和结果
- **当前冲突** - 持续的战争、军事紧张局势、边界争端、内乱、恐怖主义威胁和地缘政治紧张
- **标签式界面** - 当前冲突(红色主题)和历史冲突(蓝色主题)显示在独立的标签页中
- **国家高亮** - 选中的国家会显示为红色填充,并在加载数据时闪烁
- **AI 驱动的分析** - 使用 Valyu Answer API 并附带引用来源综合冲突数据
### 军事基地图层
可视化全球军事存在:
- **美军基地** - 显示为绿色标记(全球 30 多个基地)
- **NATO 设施** - 显示为蓝色标记
- **基地详情** - 点击任意基地可查看其名称、类型和所在国家
- **自动加载** - 地图初始化时加载军事基地数据
- **覆盖范围** - 包括欧洲、亚太、中东、非洲和美洲的基地
### 地图可视化
- **自动平移模式** - 播放/暂停按钮,用于自动平移全球地图
- **事件聚合** - 在较低缩放级别下将邻近事件分组,以获得更清晰的视图
- **热图视图** - 切换热图以可视化事件密度
- **实体位置** - 研究实体时,其已知位置会以紫色标记出现在地图上
## 技术栈
- **框架**:Next.js 16 (App Router)
- **地图**:Mapbox GL JS + react-map-gl
- **UI**:Tailwind CSS v4 + 自定义组件
- **情报 API**:valyu-js (搜索、问答、深度研究)
- **模式验证**:zod
- **状态管理**:Zustand
- **Markdown**:react-markdown + remark-gfm
## 快速开始
### 前置条件
- Node.js 18+
- Mapbox 账户和 API 令牌
- Valyu API 密钥
### 安装说明
1. 克隆仓库并安装依赖:
```
npm install
```
2. 在根目录创建一个 `.env.local` 文件:
```
NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
VALYU_API_KEY=your_valyu_api_key_here
NEXT_PUBLIC_APP_MODE=self-hosted
# 可选:启用 AI 驱动的 Location Extraction 以提高准确性
OPENAI_API_KEY=your_openai_api_key_here
```
3. 获取您的 API 密钥:
- **Mapbox**:[获取令牌](https://account.mapbox.com/access-tokens/)
- **Valyu**:[获取 API 密钥](https://valyu.ai)
- **OpenAI**(可选):[获取 API 密钥](https://platform.openai.com/api-keys) - 启用 AI 驱动的地理位置提取
4. 运行开发服务器:
```
npm run dev
```
5. 在浏览器中打开 [http://localhost:3000](http://localhost:3000)。
## 项目结构
```
globalthreatmap/
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Main dashboard
│ ├── globals.css # Global styles
│ └── api/ # API routes
│ ├── events/ # Event fetching via Valyu
│ ├── entities/ # Entity research
│ ├── reports/ # Deep research reports
│ ├── countries/
│ │ └── conflicts/ # Country conflict intelligence
│ └── military-bases/ # Military base data
├── components/
│ ├── map/ # Map components
│ │ ├── threat-map.tsx # Main map component
│ │ ├── timeline-scrubber.tsx # Auto-pan controls
│ │ └── country-conflicts-modal.tsx # Conflict details modal
│ ├── feed/ # Event feed components
│ ├── search/ # Entity search components
│ ├── alerts/ # Alert management
│ └── ui/ # Base UI components
│ └── markdown.tsx # Markdown renderer
├── lib/
│ ├── valyu.ts # Valyu client & API functions
│ ├── geocoding.ts # Location extraction
│ └── event-classifier.ts # Event classification
├── stores/
│ └── map-store.ts # Map state (viewport, layers, bases)
├── types/ # TypeScript types
└── hooks/ # React hooks
```
## 使用说明
### 交互式地图
- **点击一个国家** - 打开显示历史和当前冲突的“国家冲突”模态框
- **点击一个事件标记** - 显示事件详情弹窗
- **点击一个军事基地** - 显示基地名称、类型(美国/NATO)和所在国家
- **缩放/平移** - 导航地图或使用自动平移模式
### 事件信息流
事件信息流显示实时全球事件。您可以:
- 按威胁等级过滤(关键、高、中、低、信息)
- 按类别过滤(冲突、抗议、灾害、外交等)
- 按关键词搜索事件
- 点击事件,地图将飞至其位置
### 自动平移模式
左下角的播放/暂停按钮用于切换地图自动平移:
- **播放** - 地图持续向东平移全球
- **暂停** - 停止自动平移动画
### 情报档案(深度研究)
使用 Valyu 的 Deep Research API 构建针对任何实体的综合情报档案。输入任何实体——国家、民兵组织、私营军事公司、贩毒集团、政治人物——即可获取:
- **~50 页情报报告** - 来源广泛的分析报告,涵盖背景、组织结构、关键人物、存在区域、近期活动、威胁评估和事件时间线
- **CSV 数据导出** - 包含位置、坐标、关键人物、相关组织、重大事件及日期、来源 URL 的结构化数据——便于进一步分析
- **PowerPoint 简报** - 用于演示的 8 页执行情报简报
- **PDF 报告** - 可下载的完整报告
报告生成需要 5-10 分钟,但极其详细和全面,引用了来自网络、学术论文和专有数据库的数百个来源。非常适合需要用于简报和进一步分析的可导出交付物的开源情报分析师、研究人员和情报专业人士。
### 国家冲突
点击地图上的任何国家以查看:
- **当前标签页**(红色)- 活跃冲突、军事紧张局势和持续的安全威胁
- **历史标签页**(蓝色)- 包含日期和结果的过去战争和军事交战
- **来源** - 所有冲突信息的引用参考(不包括维基百科)
### 警报
基于以下条件创建警报规则:
- 关键词(例如,“nuclear”、“sanctions”)
- 威胁等级
- 地理区域(即将推出)
## API 路由
| 路由 | 方法 | 描述 |
|-------|--------|-------------|
| `/api/events` | GET | 从 Valyu 获取全球事件 |
| `/api/events` | POST | 使用自定义查询获取事件 |
| `/api/entities` | GET/POST | 研究实体并获取位置 |
| `/api/deepresearch` | POST | 创建包含交付物的异步深度研究任务 |
| `/api/deepresearch/[taskId]` | GET | 轮询深度研究任务状态和结果 |
| `/api/reports` | POST | 生成深度研究报告 |
| `/api/countries/conflicts` | GET | 获取一个国家的历史和当前冲突 |
| `/api/military-bases` | GET | 获取美国和 NATO 军事基地位置(缓存 1 小时) |
## Valyu 集成
此应用使用 [Valyu](https://valyu.ai) 获取情报数据:
- **Search API** - 寻找全球事件和新闻
- **Answer API** - 综合冲突情报和军事基地数据
- **Deep Research** - 全面的实体分析
搜索结果不包括维基百科。
## 身份验证
全球威胁地图支持两种应用模式,由 `NEXT_PUBLIC_APP_MODE` 环境变量控制。
### 应用模式
| 模式 | 描述 |
|------|-------------|
| `self-hosted` | 默认模式。无需身份验证。所有功能均可自由访问。 |
| `valyu` | OAuth 模式。用户使用 Valyu 登录以访问附加功能。 |
### 自托管模式(默认)
在自托管模式下,应用完全使用您自己的 Valyu API 密钥运行:
```
NEXT_PUBLIC_APP_MODE=self-hosted
VALYU_API_KEY=your_valyu_api_key_here
```
- 不显示登录面板
- 所有功能对所有用户可用
- API 使用费计入您的 Valyu 账户
### Valyu OAuth 模式
在 valyu 模式下,用户使用其 Valyu 账户进行身份验证:
```
NEXT_PUBLIC_APP_MODE=valyu
# OAuth 配置(联系 contact@valyu.ai 获取凭证)
NEXT_PUBLIC_VALYU_AUTH_URL=https://auth.valyu.ai
NEXT_PUBLIC_VALYU_CLIENT_ID=your-client-id
VALYU_CLIENT_SECRET=your-client-secret
VALYU_APP_URL=https://platform.valyu.ai
NEXT_PUBLIC_REDIRECT_URI=http://localhost:3000/auth/valyu/callback
```
### 功能限制(Valyu 模式)
在 valyu 模式下运行时,某些功能需要身份验证:
| 功能 | 未认证 | 已认证 |
|---------|-----------------|---------------|
| 查看地图和事件 | ✅ 免费 | ✅ 免费 |
| 事件信息流 | ✅ 免费 | ✅ 免费 |
| 国家冲突 | ✅ 2 次免费查询 | ✅ 无限制 |
| 实体搜索 | ❌ 受阻 | ✅ 无限制 |
| 军事基地 | ✅ 免费 | ✅ 免费 |
用户用尽免费使用次数后,将出现登录模态框提示其进行身份验证。
### OAuth 流程
身份验证使用带有 PKCE(Proof Key for Code Exchange)的 OAuth 2.0:
1. 用户点击“使用 Valyu 登录”
2. 应用生成 PKCE 代码验证器和挑战码
3. 用户被重定向到 Valyu 的授权页面
4. 身份验证后,Valyu 重定向回 `/auth/valyu/callback`
5. 应用使用授权码交换访问令牌
6. 用户信息存储在 localStorage 中
### 项目结构(认证)
```
globalthreatmap/
├── app/
│ ├── api/oauth/token/ # Token exchange endpoint
│ └── auth/valyu/callback/ # OAuth callback page
├── components/auth/
│ ├── sign-in-panel.tsx # Floating auth panel
│ └── sign-in-modal.tsx # Sign-in dialog
├── stores/
│ └── auth-store.ts # Auth state management
└── lib/
└── oauth.ts # PKCE utilities
```
## 许可证
MIT
### 安装说明
1. 克隆仓库并安装依赖:
```
npm install
```
2. 在根目录创建一个 `.env.local` 文件:
```
NEXT_PUBLIC_MAPBOX_TOKEN=your_mapbox_token_here
VALYU_API_KEY=your_valyu_api_key_here
NEXT_PUBLIC_APP_MODE=self-hosted
# 可选:启用 AI 驱动的 Location Extraction 以提高准确性
OPENAI_API_KEY=your_openai_api_key_here
```
3. 获取您的 API 密钥:
- **Mapbox**:[获取令牌](https://account.mapbox.com/access-tokens/)
- **Valyu**:[获取 API 密钥](https://valyu.ai)
- **OpenAI**(可选):[获取 API 密钥](https://platform.openai.com/api-keys) - 启用 AI 驱动的地理位置提取
4. 运行开发服务器:
```
npm run dev
```
5. 在浏览器中打开 [http://localhost:3000](http://localhost:3000)。
## 项目结构
```
globalthreatmap/
├── app/
│ ├── layout.tsx # Root layout
│ ├── page.tsx # Main dashboard
│ ├── globals.css # Global styles
│ └── api/ # API routes
│ ├── events/ # Event fetching via Valyu
│ ├── entities/ # Entity research
│ ├── reports/ # Deep research reports
│ ├── countries/
│ │ └── conflicts/ # Country conflict intelligence
│ └── military-bases/ # Military base data
├── components/
│ ├── map/ # Map components
│ │ ├── threat-map.tsx # Main map component
│ │ ├── timeline-scrubber.tsx # Auto-pan controls
│ │ └── country-conflicts-modal.tsx # Conflict details modal
│ ├── feed/ # Event feed components
│ ├── search/ # Entity search components
│ ├── alerts/ # Alert management
│ └── ui/ # Base UI components
│ └── markdown.tsx # Markdown renderer
├── lib/
│ ├── valyu.ts # Valyu client & API functions
│ ├── geocoding.ts # Location extraction
│ └── event-classifier.ts # Event classification
├── stores/
│ └── map-store.ts # Map state (viewport, layers, bases)
├── types/ # TypeScript types
└── hooks/ # React hooks
```
## 使用说明
### 交互式地图
- **点击一个国家** - 打开显示历史和当前冲突的“国家冲突”模态框
- **点击一个事件标记** - 显示事件详情弹窗
- **点击一个军事基地** - 显示基地名称、类型(美国/NATO)和所在国家
- **缩放/平移** - 导航地图或使用自动平移模式
### 事件信息流
事件信息流显示实时全球事件。您可以:
- 按威胁等级过滤(关键、高、中、低、信息)
- 按类别过滤(冲突、抗议、灾害、外交等)
- 按关键词搜索事件
- 点击事件,地图将飞至其位置
### 自动平移模式
左下角的播放/暂停按钮用于切换地图自动平移:
- **播放** - 地图持续向东平移全球
- **暂停** - 停止自动平移动画
### 情报档案(深度研究)
使用 Valyu 的 Deep Research API 构建针对任何实体的综合情报档案。输入任何实体——国家、民兵组织、私营军事公司、贩毒集团、政治人物——即可获取:
- **~50 页情报报告** - 来源广泛的分析报告,涵盖背景、组织结构、关键人物、存在区域、近期活动、威胁评估和事件时间线
- **CSV 数据导出** - 包含位置、坐标、关键人物、相关组织、重大事件及日期、来源 URL 的结构化数据——便于进一步分析
- **PowerPoint 简报** - 用于演示的 8 页执行情报简报
- **PDF 报告** - 可下载的完整报告
报告生成需要 5-10 分钟,但极其详细和全面,引用了来自网络、学术论文和专有数据库的数百个来源。非常适合需要用于简报和进一步分析的可导出交付物的开源情报分析师、研究人员和情报专业人士。
### 国家冲突
点击地图上的任何国家以查看:
- **当前标签页**(红色)- 活跃冲突、军事紧张局势和持续的安全威胁
- **历史标签页**(蓝色)- 包含日期和结果的过去战争和军事交战
- **来源** - 所有冲突信息的引用参考(不包括维基百科)
### 警报
基于以下条件创建警报规则:
- 关键词(例如,“nuclear”、“sanctions”)
- 威胁等级
- 地理区域(即将推出)
## API 路由
| 路由 | 方法 | 描述 |
|-------|--------|-------------|
| `/api/events` | GET | 从 Valyu 获取全球事件 |
| `/api/events` | POST | 使用自定义查询获取事件 |
| `/api/entities` | GET/POST | 研究实体并获取位置 |
| `/api/deepresearch` | POST | 创建包含交付物的异步深度研究任务 |
| `/api/deepresearch/[taskId]` | GET | 轮询深度研究任务状态和结果 |
| `/api/reports` | POST | 生成深度研究报告 |
| `/api/countries/conflicts` | GET | 获取一个国家的历史和当前冲突 |
| `/api/military-bases` | GET | 获取美国和 NATO 军事基地位置(缓存 1 小时) |
## Valyu 集成
此应用使用 [Valyu](https://valyu.ai) 获取情报数据:
- **Search API** - 寻找全球事件和新闻
- **Answer API** - 综合冲突情报和军事基地数据
- **Deep Research** - 全面的实体分析
搜索结果不包括维基百科。
## 身份验证
全球威胁地图支持两种应用模式,由 `NEXT_PUBLIC_APP_MODE` 环境变量控制。
### 应用模式
| 模式 | 描述 |
|------|-------------|
| `self-hosted` | 默认模式。无需身份验证。所有功能均可自由访问。 |
| `valyu` | OAuth 模式。用户使用 Valyu 登录以访问附加功能。 |
### 自托管模式(默认)
在自托管模式下,应用完全使用您自己的 Valyu API 密钥运行:
```
NEXT_PUBLIC_APP_MODE=self-hosted
VALYU_API_KEY=your_valyu_api_key_here
```
- 不显示登录面板
- 所有功能对所有用户可用
- API 使用费计入您的 Valyu 账户
### Valyu OAuth 模式
在 valyu 模式下,用户使用其 Valyu 账户进行身份验证:
```
NEXT_PUBLIC_APP_MODE=valyu
# OAuth 配置(联系 contact@valyu.ai 获取凭证)
NEXT_PUBLIC_VALYU_AUTH_URL=https://auth.valyu.ai
NEXT_PUBLIC_VALYU_CLIENT_ID=your-client-id
VALYU_CLIENT_SECRET=your-client-secret
VALYU_APP_URL=https://platform.valyu.ai
NEXT_PUBLIC_REDIRECT_URI=http://localhost:3000/auth/valyu/callback
```
### 功能限制(Valyu 模式)
在 valyu 模式下运行时,某些功能需要身份验证:
| 功能 | 未认证 | 已认证 |
|---------|-----------------|---------------|
| 查看地图和事件 | ✅ 免费 | ✅ 免费 |
| 事件信息流 | ✅ 免费 | ✅ 免费 |
| 国家冲突 | ✅ 2 次免费查询 | ✅ 无限制 |
| 实体搜索 | ❌ 受阻 | ✅ 无限制 |
| 军事基地 | ✅ 免费 | ✅ 免费 |
用户用尽免费使用次数后,将出现登录模态框提示其进行身份验证。
### OAuth 流程
身份验证使用带有 PKCE(Proof Key for Code Exchange)的 OAuth 2.0:
1. 用户点击“使用 Valyu 登录”
2. 应用生成 PKCE 代码验证器和挑战码
3. 用户被重定向到 Valyu 的授权页面
4. 身份验证后,Valyu 重定向回 `/auth/valyu/callback`
5. 应用使用授权码交换访问令牌
6. 用户信息存储在 localStorage 中
### 项目结构(认证)
```
globalthreatmap/
├── app/
│ ├── api/oauth/token/ # Token exchange endpoint
│ └── auth/valyu/callback/ # OAuth callback page
├── components/auth/
│ ├── sign-in-panel.tsx # Floating auth panel
│ └── sign-in-modal.tsx # Sign-in dialog
├── stores/
│ └── auth-store.ts # Auth state management
└── lib/
└── oauth.ts # PKCE utilities
```
## 许可证
MIT标签:AI分析, API集成, Mapbox, OSINT指挥中心, 事件提要, 事件监控, 交互式地图, 全球威胁地图, 冲突分析, 可观测性, 后端服务, 地缘政治, 威胁情报, 安全事件情报, 实时事件映射, 实时数据处理, 开发者工具, 情报分析, 情报档案, 网络安全, 网络诊断, 脚本检测, 自动化攻击, 警报系统, 隐私保护