1307 字 7 分钟
NOTAM 航警与海事通告可视化平台
项目概述
火箭发射相关的航空通告和海事安全信息,往往用编号、时间、经纬度和大段文字描述临时危险区、碎片落区及限制区域。直接阅读原文,很难快速理解区域的位置、形状,以及不同通告之间的空间关系。
NOTAM 航警与海事通告可视化平台将这些文本转换为结构化数据,并绘制到交互式地图上。通过地图、时间窗口、来源原文和历史记录之间的关联,减少手工整理坐标与反复查阅通告的工作。
- 在线体验:打开 NOTAM 地图
- 项目源码:Joey0609/notams
本项目基于 FallingFengre/notams 修改与扩展,围绕数据源接入、通告解析、历史关联和地图交互持续完善。
从通告文本到地图区域
多来源数据接入
项目接入航空 NOTAM 与海事安全信息,包括 FAA、DAIP 等航空通告来源,以及 MSI 等海事信息。
不同来源的返回格式和字段组织并不一致。数据源模块分别负责请求与原文解析,再统一输出通告编号、坐标、有效时间、高度、来源和原始文本等字段,交给后续流程处理。
这种组织方式使新增来源时可以复用已有的过滤、归档和地图展示流程,同时允许按配置调整来源的启用顺序。
坐标与时间标准化
一条通告可能包含连续坐标点、区域边界、垂直范围和多个时间描述。解析流程需要把这些信息拆解为可绘制、可查询的数据,并保留原始通告,便于对照检查。
项目对坐标、有效期和来源字段进行整理,再结合区域过滤与重复记录处理,生成前端使用的数据快照。地图因此可以同时呈现区域形状与通告上下文。
地图交互与可视化
二维地图与三维地球
平台提供基于 Leaflet 的二维地图和基于 Cesium 的三维地球视图。二维地图便于查看局部区域、对照底图与测量距离;三维地球用于观察更大范围的空间分布。
三维视图还提供晨昏光照、显示时刻与时间推进控制,便于在不同时间条件下观察地球场景。
坐标查询与地图测距
对于需要进一步核对的位置,用户可以使用经纬度查询和地图测距工具,直接在地图中查看目标点与区域之间的相对关系,减少在多个工具之间切换。
图片导出
地图支持图片导出,并提供导出范围与格式设置,方便保留当前视图,用于个人记录、交流和项目展示。
历史检索与来源对照
单独查看某一时刻的通告,只能得到局部信息。项目提供历史航警检索和归档匹配,将当前区域与已有记录关联起来,方便比较不同时期的区域位置与边界变化。
当同一事件出现在多个来源时,系统会进行来源整理与去重,尽量保留有效字段,避免空值覆盖已有信息。保留原始文本,也让地图上的结果能够回到具体通告进行核对。
数据更新与工程实现
整个处理链路可以概括为:
多来源获取 → 字段解析 → 坐标与时间整理 → 区域及有效期过滤 → 去重与历史匹配 → 数据快照 → 地图展示。
- 数据处理:使用 Python 组织获取、解析、过滤、归档与变更判定流程。
- 前端展示:使用 HTML、CSS 和 JavaScript,结合 Leaflet、Cesium 完成地图交互。
- 数据存储:通过 JSON 文件连接数据处理与静态前端,保留历史匹配结果。
- 站点发布:通过 GitHub Actions 构建数据更新与 GitHub Pages 发布流程。
- 变更通知:提供邮件与 QQ 通知链路,并结合变更判定和通知记录减少重复提醒。
更新流程也需要区分“没有新通告”和“数据获取异常”。项目对获取结果进行有效性判断,避免将异常响应直接视为正常更新;发布流程则根据生成内容是否变化决定是否部署,减少重复发布。
项目价值
这个项目将原本分散、格式各异的通告信息,整理成可以在地图上浏览、检索和对照的空间数据。
对使用者而言,入口是一张地图:查看区域、核对时间、查询位置、比较历史、导出视图。其背后则是一条从外部数据获取到结构化处理,再到交互展示的完整链路。
后续维护的重点仍然是解析准确性、来源可追溯性与地图交互体验,让每一个绘制结果都能找到对应的原始依据。