FNBIP/aegis-osint-map
GitHub: FNBIP/aegis-osint-map
基于 Next.js 和 Mapbox 构建的实时开源情报态势感知平台,整合全球事件、军事设施、航班船舶、基础设施等多源数据于交互式地图。
Stars: 0 | Forks: 1
# 全球威胁与事件情报地图
一个实时全球态势感知平台,将安全事件、地缘政治动态和威胁指标绘制在交互式地图上。可以将其视为一个 OSINT(开源情报)指挥中心。

## 功能特性
### 核心功能
- **实时事件映射** - 在世界地图上绘制突发新闻事件(冲突、抗议、自然灾害),并用颜色编码威胁等级
- **交互式 Mapbox 地图** - 深色主题地图,支持聚合、热力图可视化和流畅导航
- **事件订阅源** - 实时可过滤的全球事件流,支持按类别和威胁等级筛选
- **情报档案** - 为任何行为体构建情报档案,包含深度研究报告、CSV 数据导出和 PowerPoint 简报
- **警报系统** - 配置基于关键词和区域的警报,支持实时通知
### 国家情报
点击任意国家查看详细的冲突情报:
- **历史冲突** - 历史上的战争、军事行动和冲突,包含日期、对立双方和结果
- **当前冲突** - 正在进行的战争、军事紧张局势、边境争端、内乱、恐怖主义威胁和地缘政治紧张局势
- **选项卡界面** - 当前冲突(红色主题)和历史冲突(蓝色主题)分别显示在独立的选项卡中
- **国家高亮** - 选中的国家在加载数据时会填充红色并闪烁
- **AI 驱动分析** - 使用 Valyu Answer API 综合冲突数据,并提供引用来源
### 军事基地图层
可视化全球军事存在:
- **美军基地** - 显示为绿色标记(全球 30+ 个基地)
- **北约设施** - 显示为蓝色标记
- **基地详情** - 点击任意基地查看其名称、类型和所在国家
- **自动加载** - 地图初始化时自动加载军事基地数据
- **覆盖范围** - 包括欧洲、亚太、中东、非洲和美洲的基地
### BitChat 去中心化通信
基于 Nostr 协议和 BitChat 地理哈希频道的内置加密聊天:
- **基于位置的频道** - 聊天室通过地理哈希自动与您的地图视口绑定 —— 移动地图即可切换区域
- **284 个地理分布式中继** - 连接到 [permissionlesstech/georelays](https://github.com/permissionlesstech/georelays) 目录,使用 Haversine 距离公式找到离您位置最近的中继
- **无需账户** - 自动生成加密密钥对并存储在本地,支持导出/导入
- **加密私信** - 用户之间支持 NIP-04 加密直接消息
- **23 个预置房间** - 从美国东海岸到澳大利亚的全球覆盖,带有实时活动指示器
- **BitChat 协议兼容** - 使用 kind 20000(临时地理哈希)、kind 23333(标准频道)和 kind 1 事件 —— 与 [bitchat.land](https://bitchat.land) 完全互操作
- **中继管理** - 添加/删除中继,查看连接状态,支持 Tor 的 `.onion` 地址
### 海底光缆与管道
实时基础设施情报图层:
- **30 条主要海底光缆** - 可视化连接各大洲的全球海底光纤网络
- **光缆状态指示器** - 按运营状态进行颜色编码:青色(活跃)、红色(受损)、黄色(降级)、灰色(已停用)
- **25 条主要管道** - 石油和天然气管道路线,带有状态颜色编码(活跃、受损、规划中)
- **点击检查** - 点击任意光缆或管道查看详细信息弹窗,包括容量、长度、所有者、登陆点和状态徽章
- **真实世界状态** - FLAG Europe-Asia 和 AAE-1 标记为受损(2024 年红海切断事件),SEA-ME-WE 3 标记为降级,TAT-14 标记为已停用
### 命令面板 (Cmd+K)
整个平台的全局搜索:
- **键盘快捷键** - 按 `Cmd+K`(Mac)或 `Ctrl+K`(Windows)打开
- **搜索一切** - 事件、新闻、20 个战略城市、17 个地图图层、军事基地
- **键盘导航** - 方向键导航,Enter 选择,Esc 关闭
- **分组结果** - 结果按类别组织,便于快速浏览
### 7 天时间轴条
跨时间的事件密度可视化:
- **事件密度条** - 过去 7 天事件分布的可视化直方图
- **严重性着色** - 条形图按主要威胁等级着色
- **时间预设** - 快速过滤:1H、6H、24H、48H、7D、ALL
- **自动平移集成** - 播放/暂停以自动在全球范围内平移
### 国家不稳定指数 (CII)
战略风险仪表板:
- **22 个受监控国家** - 包括乌克兰、以色列/加沙、台湾海峡、红海、刚果民主共和国、埃塞俄比亚、索马里等
- **环形分数可视化** - 每个国家的 SVG 圆形进度指示器(0-100 刻度)
- **趋势指示器** - 比较 24 小时与前 24 小时:恶化(▲)、改善(▼)、稳定(►)
- **世界热力图** - 显示国家位置的地理点显示
### CCTV 网格
来自世界各地的实时交通摄像头画面:
- **25+ 摄像头画面** - 伦敦、新加坡、洛杉矶、香港、纽约、悉尼、迪拜
- **服务器端代理** - 政府摄像头画面通过 `/api/cctv` 代理以避免 CORS 问题
- **自动刷新** - 摄像头图像每 30 秒更新一次
### 地图可视化
- **自动平移模式** - 播放/暂停按钮,用于自动在全球范围内平移
- **事件聚合** - 在较低缩放级别下聚合附近事件,以获得更清晰的可视化效果
- **热力图视图** - 切换热力图以可视化事件密度
- **实体位置** - 研究实体时,其已知位置在地图上显示为紫色标记
- **实时航班** - 来自 OpenSky Network 的实时飞机位置
- **卫星追踪** - 通过 N2YO 获取 ISS 和主要卫星位置
- **AIS / 船只** - 通过 AISStream 进行实时船只追踪
- **天气雷达** - Mapbox 天气叠加图层
- **核设施** - 全球核设施位置
## 技术栈
- **框架**: Next.js 16 (App Router)
- **地图**: Mapbox GL JS + react-map-gl
- **UI**: Tailwind CSS v4 + custom components
- **情报 API**: valyu-js (search, answer, deep research)
- **去中心化聊天**: nostr-tools (Nostr 协议 / BitChat)
- **Schema 验证**: zod
- **状态管理**: Zustand
- **Markdown**: react-markdown + remark-gfm
## 快速开始
### 前置条件
- Node.js 18+
- Mapbox 账户和 API token
- Valyu API key
### 安装
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**: [获取 token](https://account.mapbox.com/access-tokens/)
- **Valyu**: [获取 API key](https://valyu.ai)
- **OpenAI**(可选): [获取 API key](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
│ ├── chat/ # BitChat/Nostr chat components
│ │ ├── chat-panel.tsx # Main chat container
│ │ ├── channel-header.tsx # Region name, room selector
│ │ ├── chat-message.tsx # Message bubbles
│ │ ├── chat-input.tsx # Message input
│ │ ├── dm-panel.tsx # Encrypted DMs
│ │ └── relay-status.tsx # Relay config & identity
│ ├── 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
│ ├── nostr.ts # Nostr protocol client (keys, pool, subs)
│ ├── georelays.ts # Geo-distributed relay directory
│ ├── geohash.ts # Geohash encoding/decoding
│ ├── geocoding.ts # Location extraction
│ └── event-classifier.ts # Event classification
├── stores/
│ ├── map-store.ts # Map state (viewport, layers, bases)
│ └── nostr-store.ts # Chat state (messages, relays, DMs)
├── types/ # TypeScript types
└── hooks/ # React hooks
```
## 使用说明
### 交互式地图
- **点击国家** - 打开国家冲突模态框,显示历史和当前冲突
- **点击事件标记** - 显示事件详情弹窗
- **点击军事基地** - 显示基地名称、类型(美国/北约)和国家
- **缩放/平移** - 导航地图或使用自动平移模式
### 事件订阅源
事件订阅源显示实时全球事件。您可以:
- 按威胁等级过滤(Critical、High、Medium、Low、Info)
- 按类别过滤(Conflict、Protest、Disaster、Diplomatic 等)
- 按关键词搜索事件
- 点击事件以飞行到其在地图上的位置
### BitChat 通信
点击侧边栏中的 **Comms** 选项卡以访问去中心化聊天:
- **Chat** - 在当前地理哈希频道中发送和接收消息(随着您平移地图自动切换)
- **Rooms** - 点击频道标题浏览 23 个预置的全球房间,带有实时活动指示器
- **Private** - 通过输入收件人的公钥发送 NIP-04 加密直接消息
- **Settings** - 查看/复制您的公钥,导出/导入您的私钥,管理中继连接
无需注册 —— 首次访问时会自动生成加密身份。
### 自动平移模式
左下角的播放/暂停按钮用于切换自动地图平移:
- **播放** - 地图持续向东平移穿越全球
- **暂停** - 停止自动平移动画
### 情报档案(深度研究)
使用 Valyu 的 Deep Research API 为任何行为体构建全面的情报档案。输入任何实体 —— 国家、民兵组织、私人军事公司 (PMC)、贩毒集团、政治人物 —— 并获得:
- **约 50 页情报报告** - 来源广泛的分析,涵盖背景、组织结构、关键人物、地理位置、近期活动、威胁评估和事件时间线
- **CSV 数据导出** - 结构化数据,包含位置、坐标、关键人物、相关组织、重要事件及日期和源 URL —— 便于进一步分析
- **PowerPoint 简报** - 8 页行政情报简报,用于演示
- **PDF 报告** - 可下载的完整报告
生成报告需要 5-10 分钟,但非常详细和全面,从网络上的数百个来源、学术论文和专有数据库中提取信息。非常适合需要可导出交付物用于简报和进一步分析的 OSINT 分析师、研究人员和情报专业人士。
### 国家冲突
点击地图上的任意国家以查看:
- **当前选项卡**(红色)- 活跃冲突、军事紧张局势和持续的安全威胁
- **历史选项卡**(蓝色)- 过去的战争和军事行动,包含日期和结果
- **来源** - 所有冲突信息的引用参考(排除 Wikipedia)
### 警报
创建基于以下条件的警报规则:
- 关键词(例如 "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 | 获取美国和北约军事基地位置(1 小时缓存)|
## Valyu 集成
此应用使用 [Valyu](https://valyu.ai) 获取情报数据:
- **Search API** - 查找全球事件和新闻
- **Answer API** - 综合冲突情报和军事基地数据
- **Deep Research** - 全面的实体分析
搜索结果中排除了 Wikipedia。
## 身份验证
全球威胁地图支持由 `NEXT_PUBLIC_APP_MODE` 环境变量控制的两种应用模式。
### 应用模式
| 模式 | 描述 |
|------|-------------|
| `self-hosted` | 默认模式。无需身份验证。所有功能可自由访问。|
| `valyu` | OAuth 模式。用户使用 Valyu 登录以访问附加功能。|
### 自托管模式(默认)
在自托管模式下,应用完全使用您自己的 Valyu API key 运行:
```
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. 用户点击 "Sign in with Valyu"
2. 应用生成 PKCE code verifier 和 challenge
3. 用户被重定向到 Valyu 的授权页面
4. 身份验证后,Valyu 重定向回 `/auth/valyu/callback`
5. 应用用授权码交换 access token
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
```
标签:3D 地球仪, CCTV 监控, ESC4, HTTP/HTTPS抓包, Mapbox, OSINT, 事件映射, 交互式可视化, 全球威胁监控, 军事基地, 冲突分析, 国家不稳定指数, 地缘政治分析, 威胁情报, 安全情报, 实时地图, 实时警报, 开发者工具, 态势感知, 态势感知平台, 情报档案, 油气管道, 潜艇电缆, 自动化攻击, 自动化攻击, 航班追踪, 船舶追踪