在计算机技术、图像技术和航海技术发展的推动下,通过数据来说明海上地理位置和海洋信息非常直观而形象。在海上,数据电子图形中数据量非常大,对于海量数据的存储以及后续的管理非常重要。小型的数据库功能不够强大,实现起来不容易,而大型的数据库SQL sever2000等又不具备空间数据的管理[1]。而Oracle 9i提供的空间插件Spatial具备解决空间数据的存储、查询等功能。
Oracle数据库提供了关系式和对象-关系式2种空间数据的表现形式,前者通过NUMBER型的字段或者多行记录来描述空间实体,后者通过数据库表中的MDSYS.SDO_GEOMETRY字段来描述空间实体,并且这种表现形式能够将地理空间以及其属性统一管理,在数据的一致性问题上达到高度的协调性;能够建立空间实体点线面的拓扑结构,这种方式实现简单,可维护性好。
1 海上数据电子图形数据分类海上数据电子图形数据库的设计主要是为了对所得到的电子图形数据的属性、空间位置进行增删改查以及可视化显示,并且根据数据与数据之间的关系进行航海情况的分析与统计。在进行数据库设计时要充分考虑数据的大小、获取时间、维护、更新等问题,以及整个系统的运行情况[2]。
海上数据电子图形信息包含的内容有海图信息、海图作业信息、海航信息、雷达信息、航路信息等。在数据库中要把同一性质或者相近性质的实体放在一类,在架构时放在同一层。
2 构建海上空间数据的Oracle Spatial海上数据电子数据库是不同层次的,其关键要素是元素、形状、分层及坐标系,且数据组织是按照图层、几何形状、元素,三者之间是图层包含几何形状,集合形状包含元素。数据之间可以在直角坐标系、投影坐标系之间转换。
在Oracle数据库中,通过集合数据类型MDSYS. SDO_GEOMETRY进行数据存储,其定义格式为:
CREATE TYPE SDO_GEOMETRY AS OBJECT
(SDO_ETYPE NUM,
SDO_SRID NUM,
SDO_POINT SDO_POINT_TY,
SDO_ELE_INF MDSYS. SDO_ELE_INF_ARR,
SDO_ORDI MDSYS.SDO_ORDI_NAT_ARR,);
上述数据结构中:
1)SDO_ETYPE是存储数据的类型,是4位整数型的。具体表述如下:ab00为是数据类型;ab01为存储的点;ab02为线;ab03为多边形;ab04为点线多边形的集合;ab05为包含点;ab06为包含线;ab07为多重多边形。
其中a为数据空间的维数,b为高维空间中的维度值,二维空间中此值为0,例如3001为三维空间中的一点,2003是二维空间中的多边行。由此可知,在Oracle Spatial中可以对四维数据进行存储,它的基本元素是点、线、多边形,可以利用顶点将不同的元素表示出来。
2)SDO_SRID代表坐标系的类型,是整型数据,若其值为NULL,则说明没有坐标系,如8307是WGS84坐标系。
3)SDO_POINT是用来存储点状的数据结构,仅在SDO_ELE_INF和SDO_ORDI同时为NULL的情况下,采用此结构来存取数据,在多维空间中此结构是无效的。
4)SDO_ELE_INF是用来存储数组的数据结构,数组中的每1个数据包含SDO_STAR_OFF、SDO_ETYPE和SDO_INTERPRETATION 3个元素,分别表示为元素在坐标系中的偏移量、数据类型、元素的组合方式,其具体含义如表 1所示。
5)SDO_ORDI是数组型数据类型,长度可变,存储的数据是空间物体的坐标值。
在Oracle Spatial中,数据查询是通过两级查询和连接完成的,如图 1所示。
图 1中大量的输入数据通过主过滤器将某些数据滤除掉,这样可以降低数据的复杂度和运算成本,加快查询速度,然后将检索出的结果传递给副过滤器。第一步的查询结果中继续检索,由此进行更精细的查询结果。
在Oracle Spatial中通过索引完成查询,通常情况下是利用R树[3]和四叉树进行索引。R树索引是B数在多维空间中的延伸。其实现原理如图 2所示。图中的1到7是同一个层次上的几何图形;R树的叶子节点包含a,b,c,d,同时A和B分别是a,b和c,d的最小包围矩阵,root是A和B的最小包围矩阵,如图 2所示。
四叉树索引是将二维空间上以x、y轴为对称轴进行对折分解,形成4个子空间,然后检索分解的空间,看其是否满足设定的条件,若满足,则说明此子空间是四叉树的叶子节点;否则是中间节点,然后再按照此方法继续进行查询,直至所有子空间成为满足条件的叶子节点,最后得到完整的树状结构,形成四叉树,如图 3所示。
在数据库中实现索引过程为[4]:
SDO_IND_TYPE:指出进行索引的方法类型,是R树还是四叉树,默认情况下是R树。
SDO_LEVEL:在四叉树索引时的指定区域,若level=0是整个图像,level=1是图像的1/4,...
SDO_RTREE_NUMBER_NODES:在利用R树索引时节点数。
SDO_COM_INIE:在进行索引时事务处理每次要执行的行数。
Param:与索引有关的参数。
在Oracle Spatial中,通过USER_SDO_GEOME_META来查看系统,在此空间数据结构中可以看到用户的每个图层。
元数据视图可以表示为:(
TAB_NAME VARIACHAR2(32),//表名
COU_NAME VARIACHAR2(32),//列名
DIMI MDSYS. SDO_DIM_ARR,//进行索引的限制条件
SRIDMUN);
上述数据结构中,DIMI是一个长度可变的对象,其定义为:
Creat Type SDO_DIM_ELE as OBJ(
SDO_DIM VARIACHAR2(64),//维数
SDO_MIN NUM,//最小数据
SDO_MAX NUM,//最大数据
SDO_DIF NUM;//系统误差)。
在海上数据电子地图Oracle Spatial实现过程中,要依据IHO S-57对180种物标的规定,因此在构建Oracle Spatial时,需要按照对物标的规定划分出180张表,在表中要设定好空间字段属性、每层的字段属性,然后根据设定的条件对数据库进行增删改查。在建立索引之前,要将预先的设定条件保存到USER_SDO_GEOME_META中,然后再建立不同类型的索引,接下来可以利用SELECT语句对数据进行空间物标拓扑结构、形状面积、距离等空间属性的查询。
3 结语船舶在航行的过程中,其所处环境、方位、自身的航行参数等,数据量非常大,本文建立了Oracle Spatial关系数据库用来处理海上数据电子图形,在大型数据服务器上进行数据的增删改查。并且在建立Oracle Spatial关系数据库的过程中结合编写的代码给出了海上电子数据库的数据结构构成方式。在今后的研究中将不断的进行数据库的更新,提高查询的效率,提高系统的运行速度。
[1] | 张友平, 杨丽萍. 用SQL Server 2000 Analysis Service设计与创建多维数据集[J]. 上海海事大学学报, 2003, 24 (1): 72–74. |
[2] | 谢榕. 地理信息系统中空间数据库建立的关键技术[J]. 北京测绘, 1998 (4): 2–5. |
[3] | 李萍. 一种高效的空间索引结构[J]. 盐城工学院学报(自然科学版), 2002, 15 (2): 27–31. |
[4] | 雷英杰, 王涛. 一种Oracle空间数据库的设计与实现[J]. 计算机工程与应用, 2002, 38 (13): 201–202. |