基于SLD的IHO S-52开源解决方案 | ![]() |
2. 城市空间信息工程北京市重点实验室,北京,100038;
3. 黑龙江地理信息工程院,黑龙江 哈尔滨,150081
2. Beijing Key Laboratory of Urban Spatial Information Engineering, Beijing 100038, China;
3. Heilongjiang Institute of Geomatics Engineering, Harbin 150081, China
电子海图是开展各种海上航行活动的数据基础,是极其重要的海洋信息及数据源。其图示表达在行业和研究中具有重要意义。但电子海图的发展与传统GIS的发展不相适应,具体表现在:①现行电子海图显示标准——国际海道测量组织(International Hydrographic Organization,IHO)发布的S-52 [1]只面向电子航海图,缺乏一个面向海洋地理信息全域的显示标准[2];②S-52符号化过程过于复杂,难以集成在常规GIS软件中;③S-52与S-57 [3]的耦合表达方式限制了其开放性和可扩展性。构建S-52的开放解决方案,使其便于被开源GIS软件集成和渲染是一项亟待解决的工作。
当前对S-52渲染解决方案的研究主要集中在符号库的设计和渲染引擎的开发方面。其中,符号库设计的相关研究热点在于选择通用、便捷的符号组织载体存储海图符号,如PostScript、TrueType、可缩放矢量图形(scalable vector graphics,SVG)以及在ArcGIS符号体系基础上的扩展[4-8],采用栅格图片存储符号也是一种备选方法,但是局限性大,仅适用于静态的点状符号[9]。SVG作为一种开放标准的矢量图形语言,具有良好的交互功能,非常适用于表达电子海图符号[10],本文选择此方式组织图元。
S-52渲染引擎主要有两种实现方式:①底层开发。解析S-57数据,依照S-52符号标准,对其进行实现及优化改造[11, 12],并设计渲染算法[13]及其他多种功能,集成构建海图综合显示平台[14, 15]。②开源渲染解决思路。主要基于XML构建开放式海图符号的表达规则,并通过OpenLayers、Canvas等开源类库在开源WebGIS软件上搭建相关功能模块[16],运用矢量瓦片提高渲染速度。底层开发的渲染引擎通常内嵌于系统,不具备良好的开放性、共享性和数据的互操作性。而目前的开源解决方案注重总体设计思路,对符号化规则的实现细节不足,并且其与现有开源GIS软件结合不够,技术落地仍有差距。
本文提供了一种基于开放式地理信息系统协会(Open GIS Consortium,OGC)定义的图层样式描述规范(styled layer descriptor,SLD)的S-52开源解决方案,通过建立S-52与SLD的映射及符号转换规则,实现开源GIS软件对S-52符号的规则的渲染。同时,采用一张海图配合一份SLD配置文件的思路,在uDig中实现了标准电子海图的集成显示。
1 SLD与S-52的映射关系IHO S-52规范符号演示库中的复杂符号主要有4种:①点符号或者是以面状图形中心点渲染的点符号;②复杂线型符号,线由两个或多个不同图元构成;③复杂面型,以特定条纹或者图像填充整个面状区域;④注记符号。
SLD是一种基于XML的样式描述语言,具有丰富的扩展性和良好的开放性,是一种重要的GIS符号共享方法,适用于描述复杂S-52显示规范符号库[17]中的复杂符号样式,能实现跨平台的调用渲染。SLD定义的渲染规则均包含在<Rule>标签下,利用其子标签<PointSymbolizer><LineSymbolizer><PolygonSymbolizer><TextSymbolizer>分别实现点状符号、线状符号、面状符号及注记符号的渲染。其相关标签与属性对应情况如表 1所示。
表 1 S-52符号属性与SLD对应关系 Tab.1 Correspondence Between S-52 Symbolic Properties and SLD |
![]() |
S-52中的复杂符号往往需要使用一个图形或者图形的有序组合来完成符号渲染,一个独立的图形称为图元。将S-52转换为SLD并配置出电子海图的技术流程,如图 1所示。
![]() |
图 1 S-52与SLD映射的技术流程 Fig.1 Flow Chart of Mapping S-52 to SLD |
2 关键S-52符号的SLD定义
1)简单类型。简单类型符号包括简单点符号、单色线符号、纯色填充面符号。这些符号可使用简单的SLD语句定义,它们分别由<PointSymbolizer><LineSymbolizer><PolygonSymbolizer>标签完成渲染,并可以使用子标签<Graphic><Stroke><Fill>等指定图像及定位、虚线参数及拐角类型、填充颜色及透明度等属性。
2)特殊点符号。特殊点符号是指将特定图像渲染在某一点状目标上或其周围的符号类型。S-52主要通过符号样式、锚点坐标等属性描述对其进行定义。可使用SLD中的<PointSymbolizer>及其子标签<Graphic>通过<ExternalGraphic>加载<OnlineResource>或者<InlineContent>标签设定的资源对象将符号渲染在指定位置,并可设置透明度、大小、旋转角、锚点、偏移量以调整其显示细节。
3)复杂线型符号。复杂线型符号是指用多个不同或同一图元等间距沿线状目标渲染的符号类型。S-52主要通过符号样式、线宽等属性描述对其进行定义。可使用SLD中的多个<LineSymbolizer>标签完成渲染。其子标签<Stroke>通过<GraphicStroke>标签指定<Graphic>标签加载图元;通过<CSSParameter>标签设置起始显示位置及显示间隔。其中,使用<CSSParameter name=” stroke-dasharray”>设置当前图元宽度与该图元渲染间隔宽度;使用<CSSParameter name= “stroke-dashoffset”>设定当前图元的左偏移量大小。例如,ACHARES51符号由两种图元组合而成,其渲染效果见图 2。
![]() |
图 2 复杂线型渲染对比(比例尺1:25 000) Fig.2 Comparison of Complex Linestyles Rendering (Scale 1:25 000) |
4)复杂面状符号。复杂面状符号指边界线是复杂线型或者需要填充点符号的符号类型。S-52主要通过图元样式、填充规则等属性描述对其进行定义。可使用SLD中的<PointSymbolizer>标签填充面状符号,此时点状符号会被渲染至中心点,通过<Graphic>标签设置图片的偏移量;使用SLD中的<LineSymbolizer>标签渲染其边界。例如,ENTRES51符号由两种图元叠加的复杂线型符号和一个中心点符号叠加而成,其渲染效果见图 3。
![]() |
图 3 复杂面型渲染对比(比例尺1:50 000) Fig.3 Comparison of Complex Area Rendering (Scale 1:50 000) |
5)属性依赖渲染。属性依赖渲染是指各种符号类型需要根据物标具体的属性值指定不同渲染规则的渲染模式。在SLD中控制符号渲染方式的所有标签需放置于一个<Rule>标签下,<Rule>标签可以指定<Filter>标签,利用OGC提供的3种类型操作(空间操作、比较操作、逻辑操作)实现条件控制。可仅渲染满足条件的目标,因此,通过设定多个不同的<Rule>标签,可实现按照属性值渲染的目的。面状水深渲染结果见图 4。
![]() |
图 4 面状水深渲染结果对比(比例尺1:250 000) Fig.4 Comparison of Area Water Depth Rendering (Scale 1:250 000) |
6)注记运算渲染。注记运算渲染是指直接渲染注记或根据属性渲染注记的渲染模式。SLD中包括OGC标准提供的四则运算和丰富的功能函数,四则运算通过标签<Add><Sub><Mul><Div>实现,功能函数使用<Function>标签实现。复杂的注记通常需要用到唯一的控制函数“if_then_else”,该函数能够并列与互相嵌套。使用<PropertyName>标签调用属性表中数据,利用<TextSymbolizer>标签渲染注记,设置字体、偏移量、标签等多种属性,在其子标签<Label>中叠加运算完成注记内容的设定。
例如水深点注记的渲染,大于30 m的水深点只在左上角显示整数部分,小于等于30 m的水深点,整数部分显示在左上角,小数部分显示在右下角,小数部分为0则不显示。利用<Filter>标签区分两者,再使用功能函数floor和parseInt运算获得整数部分;通过原始值减去取整值再乘以10获得小数部分,利用<LabelPlacement>标签的子标签<PointPlacement>控制整数和小数两部分的注记渲染位置,其渲染结果如图 5所示。
![]() |
图 5 水深点渲染对比 Fig.5 Comparison of Point Water Depth Rendering |
3 实验结果及分析
本文研究区域为天津港附近海域,对应海图编号为CN401013。CN401013位于渤海湾西端,港口附近地理环境特殊,交通便利,航运发达,且要素类别复杂,主要物标类型有灯、面状水深区域、水深点、港口停泊区域/禁止停泊区域、河流、建筑区域等,涵盖陆地与水域,有一定代表性。
将研究区域海图数据与SLD符号定义打包,在uDig 2.0.0中进行符号渲染,并将其渲染结果与ArcGIS 10.2、eLane Viewer两种软件的符号渲染结果进行对比。图 6为CN401013在1:500 000比例尺下的整体显示效果,本文方案渲染效果与其他两种软件的渲染效果基本一致。存在的差异及原因主要有:
![]() |
图 6 海图总体渲染效果(比例尺1:500 000) Fig.6 Overall Rendering Effect of Chart(Scale 1:500 000) |
1)SLD文件渲染结果分辨率在三者中最高,同比例尺下图形不会出现模糊,而ArcGIS的图元符号并不会随比例尺缩放,放大情况下会模糊。
2)ArcGIS的面状水深区域与另外两者不同,原因在于其等深线的设置不同,且不能修改。相比之下,SLD符号定义更丰富,可以对水深面状符号设置不同等深线,以适应不同需求,达到不同渲染结果。
3)三者在部分符号上有微小差异,原因在于它们采用了不同版本的S-52显示规范。但SLD文件可从本地或者云端调用图元资源,即使是在桌面端GIS软件上,仍然可以保持较为简单的更新能力,可快速支持最新的符号标准更新。
4 结束语本文针对S-52显示规范在GIS软件中集成难度大的问题,构建S-52与SLD的转换规则,实现了各种复杂点、线、面符号的渲染,验证了SLD符号化电子海图的可行性。与ArcGIS 10.2、eLane Viewer两种软件的S-52符号渲染显示效果进行对比后,发现SLD对海图符号的渲染结果更为优良,有开放的优势,但仍存在一定不足:①许多主流GIS软件对SLD的规范描述不支持或支持性不够,只能实现SLD的部分功能,如QGIS;②SLD图元通过网络加载,在平移缩放等操作时绘制速度较慢。后续工作将围绕上述缺陷进一步完善。
[1] |
International Hydrographic Organization. Specifications for Chart Content and Display Aspects of ECDIS: Edition 6.1[S]. Monaco: International Hydrographic Organization, 2014
|
[2] |
陈长林, 周成虎, 杨管妍, 等. 电子海图开放式图示表达模型及其构建方法[J]. 武汉大学学报·信息科学版, 2020, 45(3): 325-330. |
[3] |
International Hydrographic Organization. IHO Transfer standard for Digtal Hydrographic Data: Edition3.1[S]. Monaco: International Hydrographic Organization, 2000
|
[4] |
徐文坤, 刘爱超, 钱程程, 等. 基于ArcGIS的电子海图显示系统[J]. 海洋信息, 2019, 34(1): 19-25. |
[5] |
吴明光, 闾国年, 陈泰生. 点状地图符号数据结构同化研究[J]. 武汉大学学报·信息科学版, 2011, 36(2): 239-243. |
[6] |
李雅彦, 杜清运, 蔡忠亮, 等. 一种采用PostScript成像模型的高质量地图制图方法[J]. 武汉大学学报·信息科学版, 2018, 43(3): 379-384. |
[7] |
谭晓智, 赵德鹏, 王德强. 符合S-52规范的电子海图系统设计与实现[J]. 大连海事大学学报, 2002(4): 51-54. DOI:10.3969/j.issn.1006-7736.2002.04.014 |
[8] |
孟婵媛, 翟京生, 陆毅, 等. S-52表示库的实现方式与扩展[J]. 海洋测绘, 2003(4): 36-38. DOI:10.3969/j.issn.1671-3044.2003.04.011 |
[9] |
洪钢, 张继贤, 林宗坚. 数字栅格地图的制作[J]. 测绘科学, 2000(3): 43-45. DOI:10.3771/j.issn.1009-2307.2000.03.011 |
[10] |
陈长林. 开放式地图符号成像模型比较分析[J]. 海洋测绘, 2018, 38(4): 71-74. DOI:10.3969/j.issn.1671-3044.2018.04.015 |
[11] |
陈维琨, 郭宁, 熊平民, 等. 基于S52的电子海图显示优化[J]. 软件导刊, 2010, 9(4): 181-182. |
[12] |
刘颖, 孟婵媛, 陆毅. S-52表示库的数据组成与绘制方法[J]. 海洋测绘, 2003(6): 27-30. |
[13] |
张玉洁, 房宏图, 王玉玲. 基于S-52标准电子海图的符号研究[J]. 海洋测绘, 2009, 29(6): 34-36. |
[14] |
陆毅, 翟京生, 李汉荣, 等. 国际标准电子海图显示平台的研制[J]. 海洋测绘, 2007(1): 59-62. |
[15] |
汪海. 多元数字海图通用调显平台设计[J]. 海洋测绘, 2013, 33(2): 34-37. |
[16] |
刘天尧, 赵宇鹏, 万佳馨, 等. S-57海图的SLD符号渲染研究[J]. 地理空间信息, 2016, 14(4): 62-64. |
[17] |
International Hydrographic Organization. S-52 Annex A: ECDIS Presentation Library: Edition4.0: [S]. Monaco: International Hydrographic Organization, 2014
|