亢孟军 吴雨锟 张开硕 苏世亮 翁 敏
1 武汉大学资源与环境科学学院,湖北武汉,430079 2 城市空间信息工程北京市重点实验室,北京,100038 3 黑龙江地理信息工程院,黑龙江哈尔滨,150081
电子海图是开展各种海上航行活动的数据基础,是极其重要的海洋信息及数据源。其图示表达在行业和研究中具有重要意义。但电子海图的发展与传统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 中实现了标准电子海图的集成显示。
IHO S-52 规范符号演示库中的复杂符号主要有4 种:①点符号或者是以面状图形中心点渲染的点符号;②复杂线型符号,线由两个或多个不同图元构成;③复杂面型,以特定条纹或者图像填充整个面状区域;④注记符号。
SLD 是一种基于XML 的样式描述语言,具有丰富的扩展性和良好的开放性,是一种重要的GIS符号共享方法,适用于描述复杂S-52 显示规范符号库[17]中的复杂符号样式,能实现跨平台的调用渲染。SLD 定义的渲染规则均包含在
表1 S-52 符号属性与SLD 对应关系Tab.1 Correspondence Between S-52 SymbolicProperties and SLD
S-52 中的复杂符号往往需要使用一个图形或者图形的有序组合来完成符号渲染,一个独立的图形称为图元。将S-52 转换为SLD 并配置出电子海图的技术流程,如图1 所示。
图1 S-52 与SLD 映射的技术流程Fig.1 Flow Chart of Mapping S-52 to SLD
1)简单类型。简单类型符号包括简单点符号、单色线符号、纯色填充面符号。这些符号可使用简单的SLD 语句定义,它们分别由
2)特殊点符号。特殊点符号是指将特定图像渲染在某一点状目标上或其周围的符号类型。S-52 主要通过符号样式、锚点坐标等属性描述对其进行定义。可使用SLD 中的
3)复杂线型符号。复杂线型符号是指用多个不同或同一图元等间距沿线状目标渲染的符号类型。S-52主要通过符号样式、线宽等属性描述对其进行定义。可使用SLD 中的多个
图2 复杂线型渲染对比(比例尺1∶25 000)Fig.2 Comparison of Complex Linestyles Rendering(Scale 1∶25 000)
4)复杂面状符号。复杂面状符号指边界线是复杂线型或者需要填充点符号的符号类型。S-52主要通过图元样式、填充规则等属性描述对其进行定义。可使用SLD 中的
图3 复杂面型渲染对比(比例尺1∶50 000)Fig.3 Comparison of Complex Area Rendering(Scale 1∶50 000)
5)属性依赖渲染。属性依赖渲染是指各种符号类型需要根据物标具体的属性值指定不同渲染规则的渲染模式。在SLD 中控制符号渲染方式的所有标签需放置于一个
图4 面状水深渲染结果对比(比例尺1∶250 000)Fig.4 Comparison of Area Water Depth Rendering(Scale 1∶250 000)
6)注记运算渲染。注记运算渲染是指直接渲染注记或根据属性渲染注记的渲染模式。SLD 中包括OGC 标准提供的四则运算和丰富的功能函数,四则运算通过标签