FNBIP/aegis-osint-map

GitHub: FNBIP/aegis-osint-map

基于 Next.js 和 Mapbox 构建的实时开源情报态势感知平台,整合全球事件、军事设施、航班船舶、基础设施等多源数据于交互式地图。

Stars: 0 | Forks: 1

# 全球威胁与事件情报地图 一个实时全球态势感知平台,将安全事件、地缘政治动态和威胁指标绘制在交互式地图上。可以将其视为一个 OSINT(开源情报)指挥中心。 ![Global Threat Map](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9941f69d51101159.png) ## 功能特性 ### 核心功能 - **实时事件映射** - 在世界地图上绘制突发新闻事件(冲突、抗议、自然灾害),并用颜色编码威胁等级 - **交互式 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, 事件映射, 交互式可视化, 全球威胁监控, 军事基地, 冲突分析, 国家不稳定指数, 地缘政治分析, 威胁情报, 安全情报, 实时地图, 实时警报, 开发者工具, 态势感知, 态势感知平台, 情报档案, 油气管道, 潜艇电缆, 自动化攻击, 自动化攻击, 航班追踪, 船舶追踪