对电子海图若干方面的探究

时间:2022-06-11 01:11:28

对电子海图若干方面的探究

【摘 要】近年来,电子海图技术的发展十分迅速。随着电子海图数据量的增加,对电子海图显示的数据处理能力提出了更高的要求。本文以S-57电子海图为例,在分析S-57理论数据模型及数据结构基础上,对S-57电子海图的读取、存储及显示进行了介绍,为电子海图的应用及进一步推广起到了很好的参考作用。

【关键词】电子海图;数据结构;读取;存储;显示

近十年来,随着计算机技术的发展,电子海图的应用于发展十分迅速。电子海图技术之所以有着如此之大的发展,是因为它具有与传统纸质海图无法比拟的优点。它不仅能清晰地显示各类海图信息,而且具有航行自动警报,快速查询各种信息,短时间内实现海图的定位和更新等特点。这些技术大大地提高了航海中船员的工作效率和航海安全性,船员能够快速地、轻松地、实时地掌握航海各种信息。因此,电子海图技术的研究与发展成为了信息科技领域研究的一个重要热点,受到了越来越多的关注。本文以S-57电子海图数据为研究对象,对电子海图的的读取、存储及显示进行研究。

1.S-57背景

由于各个国家都在研发电子海图,出现了很多不同数据格式与表示模型的电子海图,致使互相之间无法共享,阻碍了电子海图国际化的进程。国际水道测量组织(International Hydrographic Organization,IHO)在制定海图标准方面做了大量的工作,1992-05,国际海事组织委员会通过了S-57作为国际官方的电子海图数字化水文数据的转换与传输标准。S-57标准规定了不同国家不同部门之间电子海图的传输标准与数据模型。

2.S-57电子海图的数据读取

数据结构是电子海图数据在计算机中的存储与表达方式,但要实现电子海图数据在不同计算机系统之间的传输与共享,需要将这些数据结构封装在物理传输的结构中,也就是以文件为单位进行网络传输。S-57海图数据的传输是以ISO8211为其数据的封装格式。

2.1 ISO8211数据封装格式

按照ISO8211数据封装格式的规范,S-57数据结构中的记录被封装为包含一组字段的逻辑记录,S-57数据结构中的字段和子字段对应地被封装为ISO8211结构中的字段和子字段。ISO8211是一个为实现数据交换而制定的格式文件,其基本的组成单元被称为逻辑记录。其中,第一个逻辑记录被称为“数据描述记录”,主要用于对实际数据内容以及逻辑结构的描述。而其他的逻辑记录被称为数据记录,这些记录是ISO8211数据模式文件的主体。

2.2 基于ISO8211lib的数据读取

S-57数据结构封装于ISO8211交换文件后,可利用ISO8211中已经封装好的ISO8211lib实现数据的读取。利用ISO8211lib可读取的逻辑记录中的字段及其关系见图1。

图1 ISO8211lib所读取的各字段关系图

ISO8211lib是专用于对S-57和空间数据传输标准数据集进行解析的开源软件工具,封装着对S-57格式数据进行操作的底层函数。其库文件中包括五个主要分类:

1)从封装文件中读取记录的DDFModule类。

2)从数据文件读取数据记录的DDFRecord类。

3)读取并实例化记录中字段的DDFField类。

4)读取记录中字段信息的DDFFieldDefn类。

5)读取子字段信息的DDFSubFieldDefn类。

2.3 电子海图数据的存储

电子海图数据由ISO8211lib中的类和函数读取后,要以某种特定的数据格式加载到计算机程序中,然后才能进行显示等后继开发。电子海图中的数据较为丰富,程序中对于数据结构的设计对系统功能与性能的指标有较大的影响。

针对描述特征记录,定义特征记录到物标指针字段的数据结构为:

Struct ffpt_struct{

std:string name;//名称

int relationPoint;//关系指针

std:String description;//描述

}

定义特征记录到空间记录指针字段的数据结构如下:

struct fspt_struct{

std:string name;//名称

int id;//标识

int direction;//方向

int usage;//用法指示

bool mask;//屏蔽

}

各个国家采集与绘制的电子海图数据都应符合S-57的规范标准,但是这些数据不能直接用于电子海图显示与信息系统,原因在于原始的电子海图数据不易在计算机中存储,而且其采用的地理坐标系统,与计算机采用的平面坐标系统之间应进行转换,此外,在原始电子海图数据中存在着大量的数据冗余,所以必须要把电子海图数据转换为电子导航海图数据,才能应用于电子海图显示与信息系统。

为了将电子海图数据转换为电子导航海图数据,针对不同的特征记录和空间记录,定义了转换过程中所需的各个类:

1)针对特征记录,定义了CPointFeature类。

2)用以描述点特征的物标记录,定义了CLineFeature类。

3)用以描述线特征物标记录,定义了CAreaFeature类,用以描述面特征物标记录。

4)对于空间记录,则定义了CIsolateNode类。

5)用以描述孤立点空间物标记录,定义了CConnectNode类。

6)用以描述连接点空间物标记录,定义了CEdgeNode类。

7)用以描述边空间物标记录。

此外,针对S-57数据格式中的数据参数,定义了CDescrip类。

3.电子海图的显示

与电子海图标准S-57相似,在电子海图的显示研究领域也存在着国际标准。1996年,IHO通过了S-52标准,该标准规范了电子海图显示的内容、颜色、图标等。S-52标准分为三个部分:

1.规定了海图改正的流程及方法。

2.规范了在电子海图显示与信息系统中使用颜色与符号的细节规范。

3.电子海图显示与信息系统中的术语进行了规范。

3.1 投影变换处理

在S-57电子海图数据格式中记录着的是地理经纬度坐标值,因此必须用某种投影的方式,将地理坐标转换为平面坐标。地球是一个不规则的椭球体,无法将经纬网准确无误地展现到用于计算机显示的平面坐标中,因此需要进行投影变换处理。墨卡托投影法由于其具有等角航线被表示成直线的特性,因此在航海图的绘制过程中被广泛地应用。

墨卡托投影法又被称为“等角正轴圆柱投影”法。利用该投影法,地理坐标与平面坐标之间的变换公式:

式(1)中:Xn为平面的纵坐标;Ye为平面的横坐标;B0为赤道的纬度;L0为零子午经度;B为地理坐标的纬度;L为地理坐标的经度;a为地球长半轴的长度;b为地球短半轴的长度;e为地球第一偏心率;e′为地球第二偏心率e′=;N为卯酉圈曲率半径。

3.2 电子海图分层显示

电子海图的显示主要采用的是GTK技术和OpenGL技术,GTK主要用于在Linux平台上开发图形用户界面,它是一个工具包,包含若干个类库来构建图形界面程序,它提供了很多控件和模块,加快程序的开发进度。GTK支持多种开发语言,其针对C++语言的封装包被称为gtkmm,基于LGPL许可证,gtkmm支持C++语言封装、多态、继承等特性。

由于电子海图数据的显示需要大量的渲染操作,所以需要采用专用于图形图像渲染处理的OpenGL,而GTK提供了一个结合了OpenGL的开发包――gtkglext,使得基于GTK开发的应用程序具备OpenGL的渲染能力。该开发包是基于GNP协议的,属于开源软件。

在Linux操作系统平台上安装成功gtkmm和gtkglext后,可开始进行电子海图显示功能的开发。

电子海图数据的图形显示可分为三个部分,分别是点、线、面。这三种类型的图形元素都可以用坐标点进行定位。对于各个元素自身的描述特征,由于数据量较大,为了更好地展现效果,采用OpenGL技术进行渲染。OpenGL中的显示列表技术可以大幅提高图形渲染的性能,可以将经常重复绘制的图形绘制与渲染函数存储到列表中,方便系统快速调用。

4.结语

我国在电子海图技术领域的起步较晚,但近些年来取得了相当不错的成绩。本文对电子海图的显示、传输、存储标准进行了研究,在一定程度上也对于电子海图的应用及进一步推广起到了很好的参考作用。

参考文献:

[1] 唐葆祥.S-57格式电子海图数据读取以及分层显示[D].广东工业大学,2011年

[2] 张静双.电子海图文件的读取与显示程序开发[J].装备制造技术,2012年第6期

上一篇:基于有限元法的桥梁结构安全验算 下一篇:货币市场基金T+0交易对商业银行的影响及其应对...