电子海图通信态势软件设计与实现

引言

电子海图显示与信息系统(ElectronicChartDisplayandInformationSystem,ECDIS)是集导航计算、航线规化、航行告警、海图信息显示、船位信息、雷达信息、船舶运动参数实时计算等功能的综合海情自动化系统。

ECDIS以计算机系统为核心,连接GPS、雷达、测深等设备,集成电子海图数据库,通过不断采集船舶位置信息,动态计算航行线路,实时反映船舶行驶状态,保障船舶的安全航行。其中计算机系统是核心部分,它主要负责实时导航计算、碰撞检测和图形图像绘制计算。在ECDIS中海图信息的存储与显示是相互独立的,信息的交换存储模型是基于S-57标准,显示模型基于S-52标准。这样为电子海图系统的设计提供了极大的灵活性,使得同一数据不需任何更改即可用于满足不同需求的显示,订制特定的显示功能。

电子海图通信态势软件,在电子海图背景上实时显示船用通信设备的通信覆盖区域,通信站点连通状态,通信质量等信息,为船用通信设备管理系统提供更加友好的态势监控界面,满足系统各种订制的通信态势显示需求。

2S-57理论数据模型

S-57(IHOTransferStandardforDigitalHy-drographicData)标准是一个水文数据传输与交换的标准,其数据模型不包含用于海图图形化显示的规则,只提供描述显示世界的方法,信息的显示独立于其存储模型。S-57标准最终目标是将对显示世界的描述转换成为可传输的文件,转换过程分为以下几个步骤:

在S57标准的“模型概述”部分中,真实世界的实体是可以感知的对象,标准将对象抽象为数据模型,现实世界中的对象非常复杂,数据模型是对高度复杂世界的简化和抽象。根据物标的特性,数据模型将物标定义为描述特征和空间特征的组合;物标被定义为一组可标识的信息,由特征物标和空间物标组合而成。下一步将特征物标与空间物标转换为对应的数据结构,一个物标(Object)对应一个记录(Record),物标(Object)中的属性(Attribute)对应于记录(Record)中的域(Field)。转换过程结束后,数据结构将以ISO8211标准格式存储在文件中,即将Record,Field等数据结构最终存储到二进制文件中。

数据模型中物标分为特征物标和空间物标,特征物标只包含对象的基本描述信息,不包括地理信息,空间物标包含对象的地理信息(如经纬度、高度等信息)。

数据结构中最基本的单位是子域(subField),一或多个子字段组成字段;一个或多个域(Field)组成记录(Record);一个或多个记录构成文件(File);一个交换集(DataExchangeSet)由一个或多个文件组成。记录分为五种:数据集描述(DataSetDe-scriptive)记录、目录(Catalogue)记录、数据字典(DataDictionary)记录、特征(Feature)记录、空间(Spatial)记录。S-57数据结构实现上采用树形结构。不同记录和字段中的信息由专门的指针字段关联。RCNM和RICD子字段标识共同作为记录的标识。

S-57格式文件使用ISO/IEC8211作为物理封装标准,ISO/IEC8211是基于文件的数据交换格式,实现不依赖具体计算机系统的数据交换。ISO/IEC8211是一个以文件为基础的交换格式,其基本结构是逻辑记录。

3S-52显示标准

S-52标准中电子海图的显示模式的规定分为两大部分,一是电子海图表示库,包括色彩编码表、符号库(点、线、面)、符号化指令集、物标—符号查找表以及条件符号化过程;二是显示生成器,在S-52表示库的各项内容的基础上,把按S-57标准结构化编码组织的数据以正确的形式显示。电子海图绘制算法,遍历S-57数据中的物标对象,提取物标属性,在检索表中根据物标属性查找相应的符号化绘制指令,该绘制指令从符号库中载入符号,从颜色表中获取对应的颜色,进行绘制


S52标准主要由三个部分构成,第一部分对电子海图的改正问题做出了详细的规定,给出了海图改正的方法和流程;第二部分描述了ECDIS屏幕上电子海图的颜色及符号的使用细节;第三部分定义了ECDIS的相关术语。其中,第二部分的《颜色和符号规范说明》是该标准的重要部分,它确定了ECDIS表达SENC信息的方法和意义。

此外,S-52标准还包括两个附件和三个附录,分别如下:

1)附件AS-52与IMOECDIS性能标准参考

2)附件BIMOECDIS性能指标

3)附录1电子航海图更新指南

4)附录2ECDIS色彩与符号详细规定

5)附录3ECDIS技术相关术语集

4电子海图通信态势软件系统设计

本文研制开发了电子海图通信态势软件系统,系统模块图如图3所示。


主要分为地图控件模块、地图渲染模块、电子海图数据源、地图图层模块、S52符号模块、通信态势绘制模块等几个模块。

地图控件模块封装了地图控件的基本功能、如漫游、缩放、标注、距离测量、加载地图文件等功能。地图渲染模块进行海图的绘制工作,将解析完的海图物标数据结构,绘制到地图控件上。海图数据源模块将S57格式的海图文件解析为基于ORG格式的标准图层数据结构,以供地图渲染模块进行绘制操作。由于S57格式的海图数据是基于物标的文件格式,而ORG库中的地图图层是基于地理位置属性的,地图图层模块是将ORG库解析的S57图

4.1地图控件模块

地图控件模块类MapCanvas封装了地图控件的基本功能,如漫游、缩放、标注等功能。

基本接口函数如下:

setExtent:设置地图范围,在加载完海图数据后,计算出整张海图所包括的区域面积,调用该接口设置地图控件显示的海图区域;

zoomIn:放大地图,当滚动鼠标时,进行地图放大操作;

zoomOut:缩小地图,当滚动鼠标时,进行地图缩小操作;

pan:地图漫游,拖动鼠标时,移动地图;

mapToScreen:地图坐标转屏幕坐标,在进行地图绘制时,将地理位置坐标转换为屏幕坐标,进行绘制;

screenToMap:屏幕坐标转地图坐标,在进行地图交互操作,如实时显示鼠标当前经纬度时,将鼠标屏幕坐标转换为地理位置坐标;

setViewPort:设置屏幕视图,屏幕视图以像素为单位。

4.2地图图层模块

电子海图系统将物标数据根据地理属性划分为不同的地图图层类S57MapLayer,S57地图数据是基于物标,图层信息是基于特征的,S57数据解析完成后生成的几何属性会加入到对应的图层中。

4.3电子海图数据源

电子海图数据源类S57DataSource定义解析S57海图文件,S52表示库文件的方法和数据结构,解析后的数据结构。地图数据模型采用分层模型层数据结构ORGMapLayer转换为S57物标图层数据结构S57MapLayer。S52符号模块用于管理物标绘制时所需的样式信息。通信态势绘制模块用于在海图上绘制通信站点的连通状态,通信覆盖范围等信息。系统的UML类图如图4所示。


结构,物标的显示与地图的放大尺寸存在一定关系,物标在不同的地图放大级别上显示效果不一样,数据源中的scaleItemGroups是根据物标显示阈值将相同显示阈值的物标进行归类;symbols用于保存S52解析后的样式名称与样式结构的映射关系,在绘制物标时,根据样式名称动态查找对应的样式结构进行绘制。

数据源类的基本接口函数如下:

parseDrawInstruction:解析动态绘制指令;

parseLookupLine:解析检索表行;

parseLookups:解析检索表,创建检索表样式ChartStyle;

parseS52Symbols:解析S52样式文件S52RAZDS.RLE,生成S52显示结构S52Symbol;translateChartStyle:使用条件符号;

getLayerStyle:获取图层样式;

getComplexSymbol:拼接复杂符号,S52的符号绘制指令非常复杂,该函数是根据S52的绘制指令生成相应的图标文件,以便重复绘制,避免重复解析绘制指令的开销,提高绘制效率。S57海图数据的加载流程如表1所示。

地图图元项类MapCanvasItem定义地图图元的基本特性,包括画笔、画刷、颜色等信息,解析地图物标得到相应的样式信息,根据物标几何属性创建对应的地图图元,并将样式信息转换为绘制的笔画、填充、颜色等信息。海图图元分为以下几种:

1)图片图元:MapCanvasImageItem

2)线图元:MapCanvasLineItem

3)多边形图元:MapCanvasPolygonItem

4)多边线图元:MapCanvasPolylineItem

5)文字图元:MapCanvasTextItem

4.4电子海图渲染模块

海图渲染类MapCanvasRenderer定义海图绘制方法和流程,自定义标识符的绘制方法,海图图片数据导出方法,是整个电子海图通信态势软件最核心的模块,其中海图绘制流程如下。

1)遍历图层S57MapLayer*layer;

2)遍历图层中的图元MapCanvasItem*can-vasItem;

3)判断图元类型,如果为文字图元,进入4),如果为图片图元,进入5),如果为线型图元,进入6),如果为多边形图元,进入7);

4)调用renderTextItem进行文字图元绘制;

5)调用renderImageItem进行图片图元绘制;

6)调用renderLineItem进行线型图元绘制;

7)调用renderPolygonItem进行多边形图元绘制;

8)绘制自定义标识符canvasMarker,绘制通信态势标识符,经纬度标识符。

4.5S-52符号模块

S52符号表示文件S52RAZDS.RLE中定义了每个物标对应的S52绘图指令;条件符号化的指令将物标的绘制操作定义为简短的绘制指令,渲染模块在绘制时,动态解析该指令为基本绘制命令,转移到相应的基本绘制回调函数中绘制,该文件中大致包含如下几项:

1)Color-tables:记录的是S52标准下各种显示模式的基准色;

2)Lookups:记录的是各种类型S52标准的点线面绘制;

3)Line-styles:记录的是各种线型;

4)Patterns:记录的是各种类型图案的绘制;

5)Symbols:记录的是各种类型符号的绘制;

这几部分的关系是:Lookups提供总体绘制方法,在绘制方法中调用其它部分的定义实现最终的绘制。也就是说,一个obj对象的绘制,首先需要定位到它属于Lookups中的哪一类,再根据Look-ups的记录查找线、图案、符号和颜色完成绘制和填充。

4.6通信态势模块

通信态势软件一般需要绘制通信站点标识,通信链路状态,通信区域范围等信息,在传统海图软件刷新界面性能较慢,而通信态势的变化频繁,要求软件必须迅速绘制通信状态,因此软件设计了地图标识符类MapCanvasMarker,用户可以自定义通信标识符,在海图界面不变化时,程序直接绘制缓存的海图图片,在图片上绘制地图标识符,这样绘制速度会得到极大提升。

MapCanvasMarker的定义如下:

classMapCanvasMarker{

QList<QPointF>points;//点

QList<QLineF>lines;//线

QList<QPolygonF>polylines;//多边线

QList<QPolygonF>polygons;//多边形

QList<QRectF>circles;//圆形

QList<QRectF>rings;//圆环};

基本接口函数如下:

  setAlpha:设置透明度;

setLineWidth:设置线宽度;

setPointSize:设置点符号大小;

setOutlineColor:设置轮廓颜色;

setFillColor:设置填充颜色;

屏幕标识符类MapScreenMarker区别于地图标识符,屏幕标识符是基于屏幕坐标,的标识符,例如经纬度的显示,比例尺、导航条等控件的绘制,都是基于屏幕坐标,用户以底图为背景,添加其它需要前置显示的内容,如雷达扫描图、战场态势、告警信息等。

MapScreenMarker定义:

classMapScreenMarker{

QList<QPointF>points;//点

QList<QLineF>lines;//线

QList<QPolygonF>polylines;//多边线

QList<QPolygonF>polygons;//多边形

QList<ScreenText>texts;//文字};

屏幕标识符类的基本接口函数与标识符类一致。

电子海图通信态势软件的实际效果图如图5。

5结语

本文结合S-57,S-52标准,采用GDAL,OGR库读取标准的S57格式文件,自主开发了基于S52标准的海图渲染控件,不足之处在于,海图S52的符号化指令过于复杂,可读性差,不利于订制个性化的显示方案,后期考虑将S52的符号绘制指令XML格式化,便于修改。另外对于电子海图格式目前只支持S-57格式的数据,对基于CM93等其余格式的支持不够