当前位置:文档之家› 空间数据库实验指导书

空间数据库实验指导书

《空间数据库》实验指导书班级学号姓名空间数据库实验预备知识——Oracle Spatial简介Oracle Spatial主要通过元数据表、空间数据字段(即sdo_Geometry字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的程序包,让用户进行更深层次的GIS应用开发。

Oracle Spatial使用空间字段sdo_Geometry存储空间数据,用元数据表来管理具有sdo_Geometry字段的空间数据表,并采用R树索引和四叉树索引技术来提高空间查询和空间分析的速度。

一、元数据表说明Oracle Spatial的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标系以及坐标维数说明等信息。

用户必须通过元数据表才能知道Oracle数据库中是否有Oracle Spatial的空间数据信息。

通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。

元数据视图的基本定义为:其中,TABLE_NAME为含有空间数据字段的表名,COLUMN_NAME为空间数据表中的空间字段名称,DIMINFO是一个按照空间维顺序排列的SDO_DIM_ARRAY对象的动态数组,SRID则用于标识与几何对象相关的空间坐标参考系。

SDO_DIM_ELEMENT对象的定义如下所示:Create Type SDO_DIM_ARRAY as OBJECT (SDO_DIMNAME VARCHAR2(64),SDO_LB NUMBER,SDO_UB NUMBER,SDO_TOLERANCE NUMBER);其中,SDO_DIMNAME是空间维名称,SDO_LB为该空间维的左下角坐标,SDO_UB 为该空间维的右上角坐标,SDO_TOLERANCE为几何对象的表示精度。

二、空间字段解析Oracle Spatial的空间数据都存储在空间字段sdo_Geometry中,理解sdo_Geometry是编写Oracle Spatial程序的关键。

sdo_Geometry是按照Open GIS 规范定义的一个对象,其原始的创建方式如下所示。

①sdo_Gtype是一个NUMBER型的数值,用来定义存储几何对象的类型。

sdo_Gtype是一个4个数字的整数,其格式为dltt,其中d表示几何对象的维数;l表示三维线性参考系统中的线性参考值,当d为3维或者4维时需要设置该值,一般情况下为空;tt为几何对象的类型,Oracle Spatial定义了7种类型的几何类型,目前,tt使用了00到07,其中08到99是Oracle Spatial保留的数字,以备将来几何对象扩展所用。

②sdo_Sridsdo_Srid也是一个NUMBER型的数值,它用于标识与几何对象相关的空间坐标系。

如果sdo_Srid为空(null),则表示没有坐标系与该几何对象相关;如果该值不为空,则该值必须为MDSYS.CS_SRS表中SRID字段的一个值,在创建含有几何对象的表时,这个值必须加入到描述空间数据表元数据的USER_SDO_GEOM_METADATA视图的SRID字段中。

对于我们通常使用国际标准的Longitude/Latitude(8307),Oracle Spatial规定,一个几何字段中的所有几何对象都必须为相同的sdo_Srid值。

③sdo_Pointsdo_Point是一个包含三维坐标X,Y,Z数值信息的对象,用于表示几何类型为点的几何对象。

如果sdo_Elem_Info和SDO_ORDINATES数组都为空,则sdo_Point中的X,Y,Z 为点对象的坐标值,否则,sdo_Point的值将被忽略(用NULL表示)。

Oracle Spatial强烈要求用sdo_Point存储空间实体为点类型空间数据,这样可以极大的优化Oracle Spatial 的存储性能和查询效率。

④sdo_Elem_Infosdo_Elem_Info是一个可变长度的数组,每3个数作为一个元素单位,用于表示坐标是如何存储在SDO_ORDINATES数组中的。

本文把组成一个元素的3个数称为3元组。

一个3元组包含以下3部分的内容:◇SDO_STARTING_OFFSETSDO_STARTING_OFFSET 表明每个几何元素的第一个坐标在SDO_ORDINATES数组中的存储位置。

它的值从1开始,逐渐增加。

◇SDO_ETYPESDO_ETYPE 用于表示几何对象中每个组成元素的几何类型。

当它的值为1, 2, 1003和2003时,表明这个几何元素为简单元素。

如果SDO_ETYPE为1003,表明该多边形为外环(第一个数为1表示外环),坐标值以逆时针存储;如果SDO_ETYPE 为2003,表明该多边形为内环(第一个数为2表示内环),坐标值以顺时针存储。

当SDO_ETYPE为4, 1005和2005时,表明这个几何元素为复杂元素。

它至少包含一个3元组用以说明该复杂元素具有多少个几何简单元素。

同样,1005表示多边形为外环,坐标值以逆时针存储;2005表示多边形为内环,坐标值以顺时针存储。

◇SDO_INTERPRETATIONSDO_INTERPRETATION具有两层含义,具体的作用由SDO_ETYPE是否为复杂元素决定。

如果SDO_ETYPE是复杂元素(4, 1005和2005),则SDO_INTERPRETATION 表示它后面有几个子3元组属于这个复杂元素。

如果SDO_ETYPE是简单元素(1, 2, 1003和2003),则SDO_INTERPRETATION表示该元素的坐标值在SDO_ORDINATES中是如何排列的。

需要注意的是,对于复杂元素来说,组成它的子元素是连续的,一个子元素的最后一个点是下一个子元素的起点。

最后一个子元素的最后一个坐标要么与下一个元素的SDO_STARTING_OFFSET值减1所对应的坐标相同,要么是整个SDO_ORDINATES数组的最后一个坐标。

⑤sdo_OrdinatesSDO_ORDINATES是一个可变长度的数组,用于存储几何对象的实际坐标,是一个最大长度为1048576,类型为Number的数组。

SDO_ORDINATES必须与sdo_Elem_Info数组配合使用,才具有实际意义。

SDO_ORDINATES的坐标存储方式由几何对象的维数决定,如果几何对象为二维,则SDO_ORDINATES的坐标以{ x1, y1, x2, y2, …}顺序排列,如果几何对象为三维,则SDO_ORDINATES的坐标以{x1, y1, z1, x2, y2, z2, …}的顺序排列。

三、空间索引技术Oracle Spatial提供R树索引和四叉树索引两种索引机制来提高空间查询和空间分析的速度。

用户需要根据不同空间数据类型创建不同的索引,当空间数据类型比较复杂时,如果选择索引类型不当,将使Oracle Spatial创建索引的过程变得非常慢。

实验一认识Oracle Spatial的主要数据库对象一、实验目的1.了解Oracle数据库中MDSYS方案的空间元数据表的结构及用途;2.了解对象类型MDSYS.SDO_DIM_ARRAY以及和空间元数据表的关系;3.掌握通过元数据视图USER_SDO_GEOM_METADATA查看空间元数据表的内容;4.了解对象类型MDSYS.SDO_GEOMETRY的结构及用途;5.了解数组类型MDSYS.SDO_DIM_ELEMENT结构及用途;6.了解数组类型MDSYS.SDO_ORDINATE_ARRAY结构及用途;二、实验环境在Oracle的Enterprise Manager Console中进行实验,打开Enterprise Manager Console的方法:开始→程序→Oracle–ora92→Enterprise Manager Console,出现如下登录界面:选择“独立启动”选择按钮,点击确定进入Enterprise Manager Console界面如下图所示:点击数据库中的实例(上图中实例为ORACLE01),进行连接,出现如下图所示的连接界面:填入正确的用户名和口令,“连接身份(A)”选择SYSDBA,如下图:连接后实例名将改变为下图所示:三、实验步骤及分析(2课时)1.了解Oracle数据库中MDSYS方案的空间元数据。

(1)打开MDSYS. SDO_GEOM_METADATA_TABLE空间元数据表,并记录表结构下来,同时给出每个属性代表的实际意义:(2)MDSYS. SDO_GEOM_METADATA_TABLE空间元数据表中的SDO_DIMINFO属性的类型是SDO_DIM_ARRAY,在用户类型.数组类型中查看SDO_DIM_ARRAY的一般信息,SDO_DIM_ARRAY这个数组的元素是什么类型?(3)查看用户类型SDO_DIM_ELEMENT的结构并记录下来并说明每个属性代表的实际意义。

它和元数据表中的SDO_DIMINFO属性有何关系?(4)打开SQL-Plus(以后步骤中的SQL都在此程序中执行),并运行如下SQL语句,建立一个包含MDSYS . SDO_GEOMETRY属性的表:CREATE TABLE SPATIALTEST (ID V ARCHAR2(20) PRIMARY KEY,NAME V ARCHAR2(100),ADDRESS V ARCHAR2(200),TELEPHONE V ARCHAR2(50),LOC MDSYS . SDO_GEOMETRY);在对应方案中找到数据表SPATIALTEST,双击查看表结构,可以看到LOCATION的数据类型是MDSYS . SDO_GEOMETRY,所以,LOCATION需要在元数据表中填写一条相关记录。

(5)根据用户表填写空间元数据,并说明其实际意义。

INSERT INTO USER_SDO_GEOM_METADATAV ALUES(‘SPATIALTEST’,‘LOC’,MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT(’Longitude’,-180,180,10),MDSYS.SDO_DIM_ELEMENT(’Latitude’,-90,90,10)),8307);(6) 利用USER_SDO_GEOM_METADATA视图查看元数据表并记录内容:SELECT * FROM USER_SDO_GEOM_METADATA(7)查看对象类型MDSYS.SDO_GEOMETRY的结构并记录下来,说明每个属性代表的实际意义。

(8)查看数组类型MDSYS.SDO_ELEM_INFO_ARRAY的结构并记录下来。

相关主题