IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 综合船桥系统电子海图数据库设计研究 -> 正文阅读

[大数据]综合船桥系统电子海图数据库设计研究

综合船桥系统(IBS)将船舶上的各种导航设备有机地结合起来,为驾驶人员提供了高精度的导航信息,并在此基础上实现了船舶航行管理、航行计划、船舶自动识别、自动监测和报警等功能,提高了航行的安全性、经济性。电子海图显示与信息系统(ECDIS)是综合船桥系统不可或缺的一个重要组成部分,然而传统的电子海图数据是以文件形式存储的,不便于查询。地理信息系统(GIS)是对与地理空间相关的数据进行有效管理和综合分析的计算机系统,是当前正蓬勃发展的技术。目前已经出现了许多优秀的GIS系统,其中不乏免费的开源项目,PostGIS空间数据库就是其中之一。将电子海图数据库系统构建于GIS数据库系统之上,实现ECDIS与GIS技术的集成,可以充分发挥GIS强大的空间数据处理能力和空间分析功能,提高ECDIS的数据处理与分析能力,促进航海信息化和海上交通安全管理。ECDIS与GIS集成的技术核心是数据的集成。本文讨论S—57和PostGIS的数据模型,分析S—57海图文件格式,并在此基础上提出基于PostGIS的电子海图数据库建设方案。

1S—57与PostGIS的数据模型

1.1S—57的理论数据模型

S—57标准将真实世界的实体抽象为“特征物标”(FeatureObject)和“空间物标”(SpatialObject)的联合。特征物标描述了实体的种类、性质、特征等属性信息,而空间物标则描述了实体的空间位置特性。S—57的理论数据模型如图1所示。

特征物标只具有描述性信息但不含任何空间几何信息,特征物标由它与一个或多个空间物标的关系定位,可以不参照任何空间物标而独立存在。IHO(国际海道测量组织)共制定了181种特征物标,分为元物标(META)、制图物标(CARTO)、地理物标(GEO)和集合物标(COLLECTION)4类,共181种。空间物标目前只有向量类型(VECTOR),向量类型又分为节点(NODE)、边(EDGE)和面(FACE)3种。节点具体又分为孤立节点(ISOLATEDNODE)和关联节点(CONNECTEDNODE)。

1.2PostGIS的空间数据模型

PostGIS是对象关系型数据库系统PostgreSQL的一个空间数据库扩展,遵循OpenGIS的规范。图2是OpenGIS的简单要素数据模型的关系图。比较图1和图2可以发现,OpenGIS的数据类型比S—57的空间物标类型要丰富得多,完全可以表示S—57的空间物标。

2S—57到PostGIS的转换

数据库的设计其实就是建立S—57到PostGIS数据库的转换关系,转换的思路是为IHO定义的每一种特征物标建立一个表,每一个特征物标以一条记录存储,特征的不同属性对应到表的不同字段。并把与其相关联的空间物标转换成一个geometry类型的字段,以方便空间查询。水深数据比较特殊,单独讨论。

2.1空间物标的转换

S—57标准里空间物标不能脱离特征物标独立存在,必须被某个特征物标引用。为了方便根据空间信息对物标进行查询,本方案将空间物标看成对应特征物标的一个属性,在特征物标表对应一个字段,并且将字段统一命名为wkbgeometry,类型是geometry。S—57的空间物标可以分成节点、边和面三种,分别用Point,Linestring和Polygon来实现。

2.2特征物标的转换

以下结合S57特征纪录的结构对数据库表进行讨论,特征物标记路的结构如表1所示:

(1)0001域是固有的域,不包含任何有用信息,所以忽略此域;

(2)FRID由RCNM、RCID、PRIM、GRUP、OBJL、RVER、RUIN七个子域组成;其中RCNM始终是“FE”,表示此纪录为特征纪录,无需在数据库里保存此子域内容,忽略此子域;RCID为纪录的编号,是单个数据文件范围内特征物标纪录的唯一标识,保留此子域作为一个字段;PRIM表示特征纪录所对应空间物标的几何图元类型,保留此子域作为一个字段;GRUP为分组编号,只有固定的7种物标取值为1,其余均为2(详见文献[5]),因而没有必要保存此子域内容,忽略此子域;OBJL为物标的代码,IHO为每种特征物标定义了一个代码,因为本方案为每一种特征物标建立一张表,所以不需要保存此子域内容,忽略此子域;RVER表示纪录的版本号,用于版本控制,保留此子域;RUIN是纪录更新指令,用于记录集更新,无需保存此子域内容,忽略此子域;

(3)FOID由AGEN、FIND、FIDS三个子域组成;其中AGEN表示发行机构,与FIND、FIDS组合在一起构成LNAM,用于唯一标识一个特征物标;由于实际中通常只应用LNAM,因此只保留LNAM作为一个字段;

(4)ATTF由重复的ATTL(属性代码)和ATVL(属性值)子域构成,具体数目与具体的特征物标有关;保留所有的子域,每个子域作为一个字段,字段名取为相应的属性名称的缩写;

(5)NATF和ATTF类似,保留所有子域,每个子域作为一个字段,字段名取为相应的属性名称的缩写;

(6)FFPC用于记录集更新,内容无需在数据库里存放,忽略此域;

(7)FFPT由可重复的LNAM、RIND和COMT子域组成;用于表示与其他特征物标之间的关系;保留着此3个子域,作为3个字段;

(8)FSPC用于记录集更新,内容无需在数据库里存放,忽略此域;

(9)FSPT是特征物标到相应的空间物标的指针,因为我们将空间数据保存成表的一列,所以不需要保存这个域的内容,忽略此域;根据以上讨论,我们可以确定数据表里的各个字段,每张特征物标表里保存wkbgeometry、RCID、PRIM、RVER、LNAM、FFPTREFS、FFPTRIND、FFPTCOMT等8个子段以及相应的属性字段;以特征物标灯标lights为例,它有它有如下34个属性:

A类属性:CATLIT;? COLOUR; DATEND; DATSTA; EXCLIT; HEIGHT; LITCHR; LITVIS; MARSYS; MLTYLT; NOBJNM; OBJNAM; ORIENT; PEREND; PERSTA; SECTR1; SECTR2; SIGGRP; SIGPER; SIGSEQ; STATUS; VERACC; VALNMR; VERDAT;? ? ? ? ?

?B类属性: INFORM; NINFOM; NTXTDS; SCAMAX; SCAMIN; TXTDSC;? ? ? ?

?? C类属性: RECDAT; RECIND; SORDAT; SORIND;

这样就确定了lights表里的所有字段,8个通用字段加上34个属性字段总共42个字段。其他特征物标表可以用相同的方法确定所有的字段。

2.3水深数据的处理

在S—57里面,多个水深点数据以一个soundg特征记录来保存。如果以一条记录来保存多个水深点数据的话,会造成查询的不方便。为此将S—57格式文件里的水深数据以多个纪录来存储,每个纪录只保存一个水深点的数据,把水深点位置保存在wkbgeometry字段中,把水深单独出来保存在depth字段中。所以soundg特征物标表除了以上讨论的字段外,还要添加一个depth字段。

3辅助表和索引

3.1辅助表

虽然通过建立上述的特征物标表可以保留S—57海图文件的有用信息,但是在使用LNAM定位特征物标时很不方便。所以建立一张包含LNAM、TBNM、FLNM和OBJL字段的辅助表以方便查询。TBNM表示特征物标所在表的表名,FLNM表示特征物标记录所在S—57文件的文件名,LNAM和OBJL的意义同上。

3.2索引

为了加快查询的速度,需要在各个表上建立索引。为此,在wkbgeometry字段上建立gist空间索引[6],以加快空间查询速度。在LNAM字段上建立索引,以加快查询速度。对水深数据,除了在wkbgeometry建立索引之外,还需要在depth字段建立btree索引,以加快对水深的查询速度。辅助表除了LNAM字段外还应在FLNM字段建立索引,原因是防止数据重复导入的机制需要利用该字段进行查询(见4.4)。

4数据的导入

4.1参考坐标系和水深单位的约定

在数据库中存储海图数据,不可避免的要关心参考坐标系和单位的问题。S—57规定ENC必须采用WGS84参考坐标系并以米作为水深和高程的单位,所以这里也以WGS84作为参考坐标系,即规定所有特征物标表的wkbgeometry字段的空间数据的SRID为4326。并且以米作为水深和高程的单位。

4.2读取S—57格式文件

OGR是一个被广泛使用的GIS开源库,支持包括S—57在内多种矢量图形格式。借助于OGR库,可以省去编写S—57格式文件解析程序的麻烦。在处理水深数据时,它可以自动实现水深数据的分割。相关资料可以参考文献[7]。

4.3添加记录

从S—57文件读取数据之后,利用简单的SQL语句即可将数据添加到已建好的表中。以灯标lights为例,假设某个灯标位于东经110度,北纬39度,该特征纪录的RCID为100,则使用语句“insertintolights(wkbgeometry,RCID)values(`SRID=4326;POINT(11039)',100)”即可将纪录添加进lights表(实际上lights表有42个字段,这里为求简洁省略掉其他字段)。导入数据的时候应该同时在辅助表添加相应的记录。

4.4防止重复导入数据

为了防止重复导入数据造成数据冗余,在数据导入之前应当先判断数据集是否曾经导入过;这一点可以通过事先查询辅助表的FLNM字段来实现。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 参考文章:电子海图、AIS、雷达???????

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-26 11:47:11  更:2022-04-26 11:48:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:26:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码