ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Osiris入门指南:用Next.js 16 + MapLibre搭建全球OSINT仪表盘

Osiris入门指南:用Next.js 16 + MapLibre搭建全球OSINT仪表盘

Osiris入门指南:用Next.js 16 + MapLibre搭建全球OSINT仪表盘

【免费下载链接】osirisOpen Source Global Intelligence Platform - Real-Time OSINT Dashboard - A Palantir Alternative - 2nZNHm3Lr9umG3DVrzYwHgktwkuKuJRXqqRqs3ewpump项目地址: https://gitcode.com/gh_mirrors/osiris14/osiris

想零预算在浏览器里拿到 Palantir 级态势感知?Osiris 是一个用 Next.js 16 + MapLibre GL 构建的开源情报(OSINT)平台,把航班、地震、火灾、17000 路摄像头画在一张 WebGL 地图上。

先看能力清单:它能盯住什么

OSINT 即 Open Source Intelligence,大白话就是用公开数据拼出态势感知。Osiris 聚合的全部是公开数据源,先看它到底能盯什么:

  • ✈️航班:adsb.fi / OpenSky 的 ADS-B 原始点,实时分成 commercial / private / jet / military 四类
  • 地震:USGS API 近 24 小时 M2.5+ 事件,无需任何 key
  • 🔥火灾:NASA FIRMS 24 小时活跃热点,叠加 EONET 火山事件,自动采样到约 2000 点防止浏览器卡顿
  • CCTV:TfL、WSDOT、Caltrans 等 17000+ 路公共摄像头,支持画一个区域自动圈出区内所有镜头并导出 GeoJSON
  • 其余:39 个全球港口 + 10 个咽喉点、23 路 24/7 新闻流、15 个冲突区、太阳天气、GDELT 事件——共 16 个图层,各有快捷键(F 航班、E 地震、S 卫星)

换掉技术栈会发生什么

把 MapLibre 换成 DOM 渲染试试?数千个点在屏上移动时,浏览器要为每个 div 重算布局,掉帧只是时间问题。MapLibre GL 是 WebGL 地图引擎——WebGL 可以理解为浏览器里的 3D 绘图接口,把"画几千个小点"的活儿丢给显卡——Osiris 靠它在数千并发实体同屏时维持 60fps。

为什么是 Next.js 16?App Router(文件系统路由,src/app/ 下每个文件就是一个 URL)让页面和 API 住在同一棵树里:/api/fires就是一个 route.ts,取数逻辑和消费它的前端图层代码挨着,改数据格式不用跨目录找。Turbopack 相当于给构建加了增量缓存,只重编译改动部分,开发时地图行为改动秒级可见——对实时应用这是刚需,否则每调一个图层都要等全量构建。

一架飞机是怎么上地图的

数据从哪来

不是单一数据源。/api/flights以 30 个主要航路走廊为中心、每点 250 海里半径向外扇出,从 adsb.fi / OpenSky 拉原始点。adsb.fi 大约只允许 1 次/秒,超了不返回 429 而是返回 200 加空数组,所以区域扫描必须限速,否则"看起来成功、其实空手而归"。

怎么渲染

// src/app/api/flights/route.ts:把原始 ADS-B 点归成四类 const ADSBFI_GAP_MS = 1100; // adsb.fi 约 1 请求/秒,并行扇出会拿到空数组 function classifyFlight(f: any) { const callsign = (f.flight || '').trim().toUpperCase(); const altMeters = (typeof f.alt_baro === 'number') ? f.alt_baro * 0.3048 : 0; // ... const airlineCode = AIRLINE_CODE_RE.exec(callsign)?.[1] ?? ''; // 不是"航空公司代码+航班号"格式,就是注册号 const isGaCallsign = !airlineCode && CALLSIGN_RE.test(callsign); const cruisesLikeAJet = altMeters > JET_CRUISE_ALT_M && (f.gs ?? 0) > JET_CRUISE_KTS; // ... }

每个原始点经classifyFlight归类后,进 MapLibre 的四个 WebGL 图层。前端激活任意航班子图层只触发一次/api/flights请求(layerFetchedRef去重),点画在 GPU 上,这是数千点不掉帧的原因。

点了会发生什么

点击飞机标记才会按需请求/api/aircraft?icao24=…与/api/flight-route,弹出详情并绘制计划航线——全局点位只负责"存在",细节随点随取。

数据怎么汇到同一张画布

一句话流:多源公开数据(adsb.fi / USGS / NASA / OpenSky…)→src/app/api/服务端路由 → 前端地图图层。

  • /api/flights:30 区域扇出 + 机型/呼号/高度速度启发式分类
  • /api/earthquakes:代理 USGS 近 24 小时 M2.5+ feed,响应带Cache-Control: s-maxage=60
  • /api/fires:解析 NASA FIRMS 24 小时 CSV 并合并 EONET 火山,响应缓存 600 秒

更新机制不是 WebSocket,而是"图层激活拉一次 + 定期轮询":航班每 5 分钟重新拉取,稳定数据放宽到 15–30 分钟,配合响应头缓存,窗口期内连 API 路由都不需要再打到上游。

本地跑通只需3条命令

git clone https://gitcode.com/gh_mirrors/osiris14/osiris cd osiris && npm install npm run dev

打开 localhost:3000,核心数据源全部公开免 key,地图立即可用。生产环境npm run build出 Next.js standalone 构建;另有 node:22-alpine 多阶段 Docker 镜像(约 220MB),docker compose up -d一条命令起。

这份代码适合谁抄作业

如果你在做实时地理可视化:数据源 → API 路由 → WebGL 图层这条链路,以及轮询 + Cache-Control 的缓存节奏,在 Osiris 的src/app/api/和OsirisMap.tsx里可以直接照搬。

【免费下载链接】osirisOpen Source Global Intelligence Platform - Real-Time OSINT Dashboard - A Palantir Alternative - 2nZNHm3Lr9umG3DVrzYwHgktwkuKuJRXqqRqs3ewpump项目地址: https://gitcode.com/gh_mirrors/osiris14/osiris

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表