S-401:当电子海图开进内河
S-100 的产品谱系讲了港口、讲了无线电服务,这篇往另一个方向走:内河。S-401 是内河电子航道图(Inland ENC)的产品规范,Ed 1.3.0——听起来冷门,实际上它可能是 S-100 家族里离国内从业者最近的一个:长江干线跑的船,装的内河 ECDIS 吃的就是这一套数据。
而拆开它之后最大的发现是:S-401 不是又一个平行的新产品——它是 S-101 的内河分身,84% 的要素同源,连官方开发库都自述「基于 S-101 Ed 2.0.0 移植」。这篇就用一份两目录的逐项对比,讲清楚这对「分身」怎么同源、怎么分家。
样本照旧是真实分发件:S-401 要素目录 Ed 1.3.0(IEHG 官方库原始 XML),喂给工具页的要素目录解析器实测,解析出 178 个要素类型、6 个信息类型。fieldOfApplication 一栏写着 Inland Navigation(内河航运)。
体量:它其实是 S-101 的内河分身
把 S-401 和 S-101 的要素目录并排放在一起,第一观感是「像」:178 个要素类型里,159 个与 S-101 的 190 个同名同义——84% 的共享率。这不是巧合。IEHG(内河 ENC 协调组)官方库的 README 写得明明白白:S-401 的图示表达目录基于 S-101 Ed 2.0.0 移植开发。内河 ECDIS 屏幕上的底图,血缘上就是 S-101 的内河分支。
同源的证据一路到底:两者用同一个 Schema(S100FC 5.2),14 个关联角色完全相同,显示框架——显示模式(Base/Standard/Other)、显示平面、场景配置、昼夜三套样式表——逐项一致;271 个共有属性里,230 个的枚举值定义一字不差(都出自同一个 IHO GI 注册库)。学会了 S-101,看 S-401 不是学新产品,是认亲戚。
分家分在哪?S-101 留下 31 个海上专属要素——灯船、灯浮标、深水航路、通航分隔环道、虚拟 AIS 航标、冰区、领海与专属经济区;S-401 则带来 19 个内河专属——通告标、船闸、港池、回旋水域、水尺、传感器、燃油补给站,以及下一节要细看的那批「法规载体」。属性总量拉开得更明显:S-101 是 236 个简单属性,S-401 是 320 个,多出来的 84 个几乎全是内河专用——从地址电话、UN 港口代码,到欧洲内河航道等级(CEMT)、枯水期洪水期的时变标注。S-101 的目录一条注释都没有,S-401 带着 122 条 remarks——内河人对每一条定义都有话要补充。
所以它和S-131的对照也要修正一下:S-131 是把港口场景装进一个小而精的产品(40 个要素类型),S-401 则演示了另一件事——同一个框架可以分出一个完整分支。框架成本被所有产品摊薄,分支成本集中在内容,这正是内河这种区域性极强的领域最需要的结构:长江的桥区净空、船闸调度、渡口管理,不需要等海图标准更新,自己登记自己的产品规范就行。
内河特有物标:定义里全是生活
翻一遍 S-401 的要素类型,一批物标是海上规范里没有或弱化的,定义原文很有画面感:
- Dam(坝):注意它的图元是 surface(面)——"a barrier to check or confine anything in motion",拦水抬位形成水库的屏障。海图里没有"坝"这个图元需求,内河里它是航道边最硬的边界。
- Checkpoint(检查站):"An official location at which to register, declare and/or inspect goods and/or people"——登记、申报、查验货和人的官方地点。内河海事管理的日常,被写成了一个面物标。
- BunkerStation(燃料补给站):定义里明确列出加油、加水、加压载,或者获得电力供应——岸电设施顺手就进来了,和港口产品的演进同步。
- Daymark(日标牌):白天视认背景里辅助识别助航标志的牌——内河航标的典型形态,海图符号体系基本不涉及。
- Fairway(航道):面要素,定义写的是"较大船舶的主通航通道所在,也是船舶通常遵循的航线"——内河航道的核心概念,一条有官方认证的"路"。
还有一个词在内河里必须掰开:Bridge。目录里它的官方定义给了两条——(1) 船上的驾驶台(navigating bridge),(2) 跨在水体上的桥。海上语境取前者,内河语境取后者,同一个词两片水域各取所需。而内河特有的"天花板"也都以自己的图元登记了:坝(Dam)是面物标,船闸的闸门(Gate)单独一个物标——这些是内河航行比海上多出来的一类刚性约束,桥区净空的限制全挂在它们身上。
还有 FerryRoute(轮渡航线)、Hulk(囤船)、Helipad(直升机坪)——每一个都能在内河航道上找到实物。要素目录的颗粒度,到这里已经细到"你站在甲板上能指出来"的程度。
把法规画进海图的一组物标
内河 ECDIS 和海图最大的口味差异,藏在一组「管理类」物标里。海上图表达的是自然与助航,内河图要表达的是一整套航道法规——S-401 为此专门登记了一批「法规载体」物标,定义原文都带着司法味:
- MaximumPermittedShipDimensions(最大允许船舶尺度):定义明写 "for which a juridical regulation with respect to the maximum permitted vessel dimensions exists"——这段水道有司法法规规定了最大船舶尺度。姊妹篇是 MaximumPermittedVesselSpeed(法定限速段)。哪段江限宽、哪段限速,不是约定俗成,是挂在物标上的法规条文。
- WaterwayGauge(水尺):"An instrument for measuring water levels"——长江边每几公里一座的水尺,在数据里是正式物标。
- DistanceMark(里程标):表示"距起点的测量距离"的实体标志或位置——长江航运说的「上水 xxx 公里」,刻度就来自它。
- WaterwayAxis(航道轴线)/ WaterwayProfile(航道断面):轴线是航道中心线;断面的定义更妙——"一条物理上不存在的线,通常连接两岸相对的两块里程标"。数据模型为了表达「这里多深多宽」,造了一条世上不存在的线。
- NoticeMark(告示牌)和 CommunicationArea(通信区):告示与报告义务的覆盖范围。
这组物标说明内河 ECDIS 的显示重点和海图不同:海图的核心图层是水深,内河图的核心图层是「规章边界」——限宽线、限速段、水尺、里程标,船长大半辈子打交道的其实就是这些东西。
服务设施:连倒垃圾都有物标
另一组高密度清单是服务设施。除了前面提过的 BunkerStation(加油加水加岸电)和 Checkpoint,翻目录还能碰到:
- RefuseDump(垃圾排放点):定义原文 "ships are able to unload their refuse like waste oil or black water"——油污水、黑水的排放点,内河环保监管的数据基础。
- RescueStation(救助站):海难救助设备所在地。
- VehicleTransfer(车辆转运):车辆能从内河船上下驳的转运点。
- ExceptionalNavigationStructure(特殊航行结构物):定义只举了两个例子——渡槽(aqueduct)和升船机(lift-lock)。三峡的升船机,在这个目录里的户口就叫这个。
- LockBasinPart(闸室分段):定义精确到 "if this lock basin has one ground level but several gates"——同一个底标高、多道闸门的复杂船闸,闸室要分段登记。
细到这个程度不是标准较真,是内河航运的日常就这么细:一条千吨级驳船从上海到重庆,途经的每个锚地、每个加油水点、每座船闸的每道闸门、每块水尺和里程标,在这份数据模型里都有对应的登记项。
同一个要素,内河多一本户口本
要素名单只分了一半家,真正的分化藏在属性绑定里。159 个共有要素里,157 个的属性绑定和 S-101 不一样——而且几乎全是单向扩充:同一个要素,内河版多带一串属性。
加得最普遍的是 sourceIndication(数据来源)和 reportedDate(报告日期)——内河数据生产方多、更新频繁,每条要素都挂着出处。约 90 个要素多了 pictorialRepresentation(图片表示),港口设施、码头这些要素可以直接带照片。约 30 个设施类要素挂上了 uNLocationCode(UN 港口代码)——内河港口是全球物流链的节点,得有国际门牌号。
最有内河味的是 categoryOfTemporalVariation(时变类别),铺在约 35 个要素上。海是慢变量,河是快变量:同一片水域,枯水期是浅滩,洪水期是通航区。内河的物标天生带着「什么水期算数」的标签。
取值域跟着一起膨胀,对照着看更直观:侧标(Lateral Mark)的类别取值,S-101 只有 4 种,S-401 有 27 种——内河航标的形状颜色组合远比海上丰富;垂直基准取值 15 个变 31 个;限制(restriction)普遍从二三十个值扩到 35–43 个。连「航标制式」这个属性也扩了容:S-101 认四种航标体系,S-401 加进了 CEVNI(欧洲内河航运规则)等内河制式——画航标的 Lua 规则为此专门加了一个 MARSYS01 辅助脚本,处理这些海上没有的体系分支。
垂直基准:最大的一处分家
所有差异里,概念级的一处是垂直基准。海图的深度体系围着潮汐转:海图基准面(Chart Datum)往下算水深,潮涨潮落是预测出来的统一背景。内河没有潮汐,却有另一件更麻烦的事——每条河的水位基准都不一样,而且跟着水文站走。
S-401 为此造了一整组河流基准属性:referenceGauge(参照水尺)、elevationOfWaterLevel(水位高程)、nameOfVerticalRiverDatumReferenceLevel(河流基准面名称)加它的取值——桥下净空、跨河缆线、水深区,这批要素的「高度」全都挂着这组属性。翻译成大白话:海上说「此处水深 12 米」,对谁都一样;内河说「此处净空 12 米」,得先问是哪个水文站、哪个基准面、今早水位多少——同一个数字,含义随河而变。S-101 目录里那 15 个垂直基准值,到 S-401 扩成 31 个,多出来的全是各国河流自己的基准体系。
这就是为什么水尺(WaterwayGauge)在内河目录里是正式物标而不只是设施——它是整张图的「零点」,所有深浅高低的参照系都拴在它身上。
画法:全面改写与一个没来得及做的机制
图示表达目录的分化比要素目录更彻底。876 个符号里 237 个是内河新造的,最大宗是通告标系统——NMKINF/NMKPRH/NMKREG 系列加起来160 多个符号,一个物标家族撑起了内河航政的整个告示体系;颜色 token 也从 67 个扩到 93 个,多出来的包括通告标牌专用的 light1–light9 色系。有意思的是其余那 640 个与 S-101 共有的符号,每一个都有字节级差异——S-401 把 SVG 的表现属性整体改写成了 CSS style 写法,变更日志里对应着一行「2026-03-27 符号更新至 S-100 SVG Profile」。一次框架级的批量手术,一个符号都没漏。
画法规则还有一处「留白」值得点名:S-101 的目录里有一套完整的警报机制(AlertCatalog + 15 个警报高亮查看组),安全等深线逼近会触发警报;S-401 还没有——它的 Lua 规则里 AlertReference 指令普遍被注释掉,等一个还没建的警报目录。内河 ECDIS 现在能「画」,还不能「叫」,这大概是两代成熟度最直观的刻度。
最后照例是工程彩蛋时间,这份 GitHub 开发库一点没让人失望:文件夹名一处叫 LineStyles 一处叫 Linestyles;磁盘上躺着 63 个线型文件,主目录 XML 里只登记了 46 个;符号主文件里还留着 SIGN01-03、testPCB 这类测试残留;线型 XML 干脆没有命名空间、编码还是 ISO-8859-1。官方 README 说这是开发库、不是签署发布包——所以这些不是「标准的瑕疵」,是正在长出来的标准的工作现场。S-123 的双写 t、S-129 的重复参数、S-401 的半成品登记表——看到的每一起,都是标准演化时留下的脚印。
分身的意义
回到谱系视角,S-401 演示了 S-100 框架一种新的生长方式:不是凭空多一个产品,而是从主干上分出一个枝——框架(Schema、角色、显示模式、昼夜样式)原封不动,内容按水域重新登记。对区域性极强的内河领域,这是成本最低的路径:不用重新发明表达体系,只在共享的 84% 上叠自己的 16%。
对国内从业者还有一层现实意义:长江干线是全世界最繁忙的内河航道之一,内河 ECDIS 在国内的推进速度可能超过很多海上产品。读懂 S-401 的最好方式,就是拿你已经熟悉的 S-101 当参照系——哪儿一样、哪儿分岔、为什么分岔,这篇的数字都给全了。
工具实测:这份 Ed 1.3.0 的要素目录(约 2.5 MB 的 XML)直接拖进要素目录解析器就解析成表——178 个要素类型可搜索可过滤,S-57 别名对照也在。想提前感受内河 ECDIS 的数据结构,这是最快的一条路。
十个在线工具的完整指南见上一篇;港口场景的 S-131 则在更早一篇。
下一篇换个视角:不看任何单个产品,看产品之间——S-98,ECDIS 屏幕上十几种数据源挤在一起时的交通规则。
我是夜航海图,做海图与地图渲染开发的工程师。博客「航图笔记」同步更新全部文章,欢迎 RSS 订阅;如果内容帮到了你,也欢迎在爱发电请我喝杯咖啡。
♥ 这篇对你有用?在爱发电支持夜航海图——请我喝杯咖啡,工具和文章都会继续更新。
评论
评论基于 GitHub Discussions,需要 GitHub 账号;没有也欢迎通过 RSS 阅读器或各平台评论区交流。