S-102:当水深从线变成网格
S-57 时代,水深是这样表达的:DEPARE 面给个深度范围,SOUNDG 撒一批离散水深点,航行员靠安全等深线一条线做判断。这套语言用了二十多年,直到多波束测深把海底测成了每平方米级的密集网格——线语言装不下面语言的信息,S-102 就是为这个来的。
S-102 是什么
一句话:把高分辨率测深成果(通常是多波束)做成标准化的水深表面产品,以网格为单位叠加在电子海图上。它和 S-101 的关系是"底图 + 高精度水深层":S-101 画出海图骨架,S-102 把最要命的水深精度补上。它的要素目录(FC 3.0.0,2024 年 12 月,图示表达目录 PC 3.0.0 同月配套)极简到近乎空旷:只有 Bathymetry Coverage 和 Quality of Bathymetry Coverage 两个要素类型,外加深度、不确定度、ID 三个属性——因为重活全在 HDF5 的网格数组里,要素层只负责登记"这块水域的测深成果在这"。
这东西不是纸上谈兵。NOAA 已经在量产 S-102 交换集(美国沿海逐块覆盖),官方测试数据集也是公开的。我拿 NOAA 的纽约港样本实测了一遍:BathymetryCoverage.01/Group_001/values 是一个 2119 × 1619 的网格,大约 340 万个单元——每个单元同时带水深值和不确定度两个字段。用我们上线的 HDF5 / S-102 解析器打开就能看到:水深范围 -0.66 ~ 20.04 m(负值是潮位下的干出高度),无效单元用填充值标记。
逐元不确定度:这一格有多可信
S-102 最有价值的字段不是水深,是每个网格单元的不确定度。传统海图告诉你"这块区域精度是某某等级",S-102 告诉你"这一格的测深误差范围是多少"。航行安全计算从"按最坏情况留余量"变成"按实际可信度做决策"——这也是 S-100 系列把质量信息做成一等公民的思路:S-57 的 M_QUAL 在 S-101 里的继任者是 Quality of Bathymetric Data 质量元要素,而 S-102 走得更远,干脆把不确定度下沉到每一个网格单元。
对渲染端:等深线变成了一道分析题
渲染开发的三个直接变化:
- 安全等深线不再是查表画线。S-57 里等深线是数据里的一条边;S-102 里你要拿着用户设定的安全水深,在网格上实时做等值线提取。网格分辨率、插值方式、等值线平滑,都是渲染端的功课。
- 深度着色由网格驱动。浅水到深水的色带填充不再是几个 DEPARE 面拼接,而是逐格映射色标——S-52 的颜色令牌体系不变,映射的输入变了。
- 不确定度要可视化。同一格的水深和它的可信度要能分开表达(高不确定度区域叠加纹理或降饱和),这是全新的渲染语义。
好消息是数据结构非常友好:S-102 用 HDF5 封装,组结构规整(BathymetryCoverage 下按 Group 分块, extent 记录网格地理范围,values 存逐元数组),现成的 HDF5 库一抓一把。我们上线的 HDF5 / S-102 解析器就是纯浏览器解析——拖个文件进来,结构、属性、水深统计直接出,不用装任何软件。
给开发者的行动建议
- 想看真数据:NOAA 的 S-102 测试集公开下载,配合上面的解析器十分钟入门
- 想做渲染:先啃网格等值线提取(marching squares 就够 v1),再考虑不确定度的视觉编码
- 想跟进度:S-102 的要素目录已迭代到 3.0.0(2024 年 12 月),规范本身还在快速演进,盯 IHO 公告比盯旧文档靠谱
水深从"标注"变成"数据",是 S-100 系列里离航行安全最近的一步。渲染端把它画好,值回票价。
我是夜航海图,做海图与地图渲染开发的工程师。博客「航图笔记」同步更新全部文章,欢迎 RSS 订阅;如果内容帮到了你,也欢迎在爱发电请我喝杯咖啡。
♥ 这篇对你有用?在爱发电支持夜航海图——请我喝杯咖啡,工具和文章都会继续更新。
评论
评论基于 GitHub Discussions,需要 GitHub 账号;没有也欢迎通过 RSS 阅读器或各平台评论区交流。