S-111:让海图知道"水往哪流"

S-102 解决了"海底长什么样",S-104 解决了"水位此刻多高",动态图层家族还差最后一块拼图:水在往哪流。同样三节船速,遇上两节横流,航向就得提前偏出去一大块——靠离泊、狭水道过弯、计划航线估算,流场都是拿真金白银结算的输入。把"潮流场"标准化成数据产品,这就是 S-111(表面流)。

上一篇拆 S-104,这篇拆它的兄弟:NOAA 切萨皮克湾业务化预报系统(CBOFS)产出的 S-111 官方样本。文件不到 700KB,展开是一部两天的潮流纪录片。

它长什么样:网格 × 时刻

拆开这份样本(2020-02-13T00Z 起报),根属性先把"这是谁"交代清楚:产品规范 INT.IHO.S-111.1.0.0、地理标识 Chesapeake_Bay、范围西经 76.2°~75.9°、北纬 36.9°~37.2°——正是切萨皮克湾入海口那段。元数据里的 CBOFS 表明这是切萨皮克湾业务化预报系统的产出;surfaceCurrentDepth = -4.5 要配着规范的深度类型索引(depthTypeIndex)读:坐标系轴向上为正,基准面以下记负——这一批数据描述的是海面以下 4.5 米处的流。

数据的组织方式是两个维度相乘:

  • 空间:54×54 = 2916 个单元的规则网格
  • 时间:SurfaceCurrent.01 下面挂着 48 个 Group,每个 Group 一帧,timePoint 从 13 日 01:00Z 到 15 日 00:00Z 逐整点推进

每个单元是一个二元组:流速 + 流向。字段注册表(Group_F)把单位写死:流速 knots(合法区间 [0, 99) 节,Ed 2.0.0 Table 10-3 的闭开区间约定),流向 arc-degrees(0 ≤ d ≤ 359.9 闭区间)。顺带一提这份样本的现场数字:首帧流速 0.03~1.89 节、均值 0.50 节;逐帧均值在 0.36~1.39 节之间起伏——涨落潮的节奏直接写在均值曲线里。全周期峰值 2.89 节出现在第 35 帧(14 日 11:00Z),落在湾口主航道附近。

directionToward:渲染前先想清楚箭头朝哪

S-111 的流向约定是 directionToward:角度表示流"流向"哪个真北方向。这和气象上"风向"(风从哪里来)正好相反,两套约定在自然界各管一摊,渲染端一旦凭直觉画箭头,海图上的流场就整体转了 180°——船没动,箭头动了,值班驾驶员会先怀疑自己的罗经。

这不是抬杠。S-100 动态图层里"方向"这个词产品间含义不一致,是接 S-104 / S-111 / S-124 数据链路时真实的坑:拿到字段先查 uom 和约定,再动手画。

填充值:2916 个单元里有 513 个是陆地

字段注册表同时声明填充值 -9999.0。这份样本里 18% 的单元(513/2916)是陆地掩膜,全部用 -9999 填充。解析端不先筛掉它,热力图的色阶会被"负一万节"拉爆,箭头图层会在陆地上画出一堆指向 (-9999°) 的乱箭——规范把约定写死在文件里,下游的防御代码就只需要一行 if (v < 0) skip。

在浏览器里放出来

两个维度怎么给用户看?我们的做法:流速画热力图、流向画箭头、时间维做成帧选择和连播。顺带一提,规范自己就给了渲染参考答案:Ed 2.0.0(2024 年 12 月)的 Table 9-1 定义了 9 档流速分档显示(以 0.5 / 1 / 2 / 3 / 5 / 7 / 10 / 13 节为界),每档一色、昼昏夜三套色表,连箭头大小都给了 2.00 节的缩放阈值——做 v1 显示效果时直接照抄就能过关。HDF5 / S-100 网格解析器已内置这份 NOAA 样本,拖一个自己的 .h5 进去也能解析——S-102 / S-111 / S-104 同为 HDF5 家族,一套骨架通吃。

浏览器端用 h5wasm 解析,有两个值得记录的坑:

  • 复合数据集被拍平。(54, 54) 的复合数据集在 h5wasm 里返回的不是 54×54 的二维结构,而是一个长度 2916 的一维数组,每个元素是 [流速, 流向] 的小数组——按二维索引取值会静默拿到错位数据。
  • dtype 没有统一形态。字段名可能挂在对象、数组或字符串三种形态上,注册表解析得写成多形态兼容,不能只测一种。

拼图齐了

到这里,S-100 动态三件套的样本都拆过了:S-102 给静态水深,S-104 给实时水位,S-111 给潮流场。三者叠加才是真正的计算:

可用富余水深 = S-102 水深 + S-104 水位 − 吃水;流压差 = S-111 流场 × 计划航速

静态海图引擎不补时间轴就接不住这套家族——而时间轴正是 S-101 时代和 S-57 时代最本质的差别之一。


我是夜航海图,做海图与地图渲染开发的工程师。博客「航图笔记」同步更新全部文章,欢迎 RSS 订阅;如果内容帮到了你,也欢迎在爱发电请我喝杯咖啡。

♥ 这篇对你有用?在爱发电支持夜航海图——请我喝杯咖啡,工具和文章都会继续更新。

← 返回目录

评论

评论基于 GitHub Discussions,需要 GitHub 账号;没有也欢迎通过 RSS 阅读器或各平台评论区交流。