unicodeveloper/globalthreatmap
GitHub: unicodeveloper/globalthreatmap
一个基于开源情报的实时全球威胁地图平台,用于在交互式地图上可视化地缘政治事件与军事存在并提供深度研究能力。
Stars: 1474 | Forks: 247
# 全球威胁与事件情报地图
一个实时全球态势感知平台,在交互式地图上绘制安全事件、地缘政治发展和威胁指标。将其视为一个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多个基地)
- **北约设施** - 以蓝色标记显示
- **基地详情** - 点击任意基地可查看其名称、类型和所在国家
- **自动加载** - 军事基地数据在地图初始化时加载
- **覆盖范围** - 包括欧洲、亚太、中东、非洲和美洲的基地
### 地图可视化
- **自动平移模式** - 播放/暂停按钮可自动平移地图
- **事件聚类** - 在低缩放级别对附近事件进行分组以获得更清晰的视觉效果
- **热力图视图** - 切换热力图以可视化事件密度
- **实体位置** - 研究实体时,其已知位置会以紫色标记显示在地图上
## 技术栈
- **框架**: 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 位置提取以提高准确性
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
```
## 用法
### 交互式地图
- **点击国家** - 打开国家冲突模态框,显示历史和当前冲突
- **点击事件标记** - 显示事件详情弹出框
- **点击军事基地** - 显示基地名称、类型(美国/北约)和所在国家
- **缩放/平移** - 导航地图或使用自动平移模式
### 事件动态
事件动态显示实时全球事件。您可以:
- 按威胁等级筛选(关键、高、中、低、信息)
- 按类别筛选(冲突、抗议、灾难、外交等)
- 按关键词搜索事件
- 点击事件以飞至其在地图上的位置
### 自动平移模式
左下角的播放/暂停按钮切换自动地图平移:
- **播放** - 地图持续向东平移穿越全球
- **暂停** - 停止自动平移动画
### 情报档案(深度研究)
使用Valyu的深度研究API为任何行为体构建全面的情报档案。输入任意实体 - 国家、民兵、私人军事公司、贩毒集团、政治人物 - 并获得:
- **约50页情报报告** - 广泛引用的分析,涵盖背景、组织结构、关键人物、地理存在、近期活动、威胁评估和事件时间线
- **CSV数据导出** - 结构化数据,包含位置、坐标、关键人物、相关组织、重要事件及日期和源URL - 便于进一步分析
- **PowerPoint简报** - 8张幻灯片的执行情报简报
- **PDF报告** - 可下载的完整报告
报告生成需要5-10分钟,但极其详细和全面,从网络、学术论文和专有数据库的数百个来源中提取信息。非常适合OSINT分析师、研究人员和情报专业人员,他们需要可导出的交付物用于简报和进一步分析。
### 国家冲突
点击地图上的任意国家以查看:
- **当前标签页**(红色) - 活跃的冲突、军事紧张局势和持续的安全威胁
- **历史标签页**(蓝色) - 过去的战争和军事行动,包含日期和结果
- **来源** - 所有冲突信息的引用来源(维基百科除外)
### 警报
基于以下条件创建警报规则:
- **关键词**(例如:"核武器"、"制裁")
- **威胁等级**
- **地理区域**(即将推出)
## 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 | 获取美国和北约军事基地位置(1小时缓存) |
## Valyu集成
本应用使用 [Valyu](https://valyu.ai) 获取情报数据:
- **搜索API** - 查找全球事件和新闻
- **回答API** - 综合冲突情报和军事基地数据
- **深度研究** - 全面分析实体
维基百科被排除在搜索结果之外。
## 身份验证
全球威胁地图支持两种应用模式,由 `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 Configuration (contact contact@valyu.ai for credentials)
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流程
身份验证使用OAuth 2.0与PKCE(代码交换证明密钥):
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 位置提取以提高准确性
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
```
## 用法
### 交互式地图
- **点击国家** - 打开国家冲突模态框,显示历史和当前冲突
- **点击事件标记** - 显示事件详情弹出框
- **点击军事基地** - 显示基地名称、类型(美国/北约)和所在国家
- **缩放/平移** - 导航地图或使用自动平移模式
### 事件动态
事件动态显示实时全球事件。您可以:
- 按威胁等级筛选(关键、高、中、低、信息)
- 按类别筛选(冲突、抗议、灾难、外交等)
- 按关键词搜索事件
- 点击事件以飞至其在地图上的位置
### 自动平移模式
左下角的播放/暂停按钮切换自动地图平移:
- **播放** - 地图持续向东平移穿越全球
- **暂停** - 停止自动平移动画
### 情报档案(深度研究)
使用Valyu的深度研究API为任何行为体构建全面的情报档案。输入任意实体 - 国家、民兵、私人军事公司、贩毒集团、政治人物 - 并获得:
- **约50页情报报告** - 广泛引用的分析,涵盖背景、组织结构、关键人物、地理存在、近期活动、威胁评估和事件时间线
- **CSV数据导出** - 结构化数据,包含位置、坐标、关键人物、相关组织、重要事件及日期和源URL - 便于进一步分析
- **PowerPoint简报** - 8张幻灯片的执行情报简报
- **PDF报告** - 可下载的完整报告
报告生成需要5-10分钟,但极其详细和全面,从网络、学术论文和专有数据库的数百个来源中提取信息。非常适合OSINT分析师、研究人员和情报专业人员,他们需要可导出的交付物用于简报和进一步分析。
### 国家冲突
点击地图上的任意国家以查看:
- **当前标签页**(红色) - 活跃的冲突、军事紧张局势和持续的安全威胁
- **历史标签页**(蓝色) - 过去的战争和军事行动,包含日期和结果
- **来源** - 所有冲突信息的引用来源(维基百科除外)
### 警报
基于以下条件创建警报规则:
- **关键词**(例如:"核武器"、"制裁")
- **威胁等级**
- **地理区域**(即将推出)
## 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 | 获取美国和北约军事基地位置(1小时缓存) |
## Valyu集成
本应用使用 [Valyu](https://valyu.ai) 获取情报数据:
- **搜索API** - 查找全球事件和新闻
- **回答API** - 综合冲突情报和军事基地数据
- **深度研究** - 全面分析实体
维基百科被排除在搜索结果之外。
## 身份验证
全球威胁地图支持两种应用模式,由 `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 Configuration (contact contact@valyu.ai for credentials)
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流程
身份验证使用OAuth 2.0与PKCE(代码交换证明密钥):
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 分析, CSV 导出, ESC4, Mapbox, OSINT, PowerPoint 报告, Railway, SEO, Valyu Answer API, 事件推送, 云端部署, 交互式地图, 全球事件监控, 全球威胁地图, 关键词警报, 军事基地, 冲突预警, 加载动画, 区域警报, 历史冲突, 国家情报, 地理信息系统, 地缘政治情报, 威胁等级, 安全事件地图, 实时威胁地图, 实时数据, 引用来源, 当前冲突, 恐怖主义威胁, 情报面板, 战争监测, 数据导出, 新闻事件映射, 深色主题, 点击国家详情, 热图可视化, 聚类分析, 自动化攻击, 边境冲突, 闪烁高亮, 颜色编码