空间数据库实验指导书实验三郭明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《空间数据库》
课程实验指导书
班级
学号
姓名
编制人:郭明
单位:北京建筑大学测绘与城市空间信息学院
2015年9月
目录
实验指导书 (1)
空间数据库实验预备知识—Oracle Spatial简介 (2)
一、元数据表说明 (2)
二、空间字段解析 (3)
三、空间索引技术 (6)
实验一认识Oracle Spatial的主要数据库对象 (7)
一、实验目的 (7)
二、实验环境 (7)
三、实验步骤及分析(2课时) (9)
实验二空间查询 (14)
一、实验目的 (14)
二、实验环境 (14)
三、实验步骤及内容(2课时) (14)
Step1. 创建一张表,其中shape用来存放空间数据 (14)
Step2. 在user_sdo_geom_metadata 表中插入新记录,用于描述空间字段 (14)
Step3. 创建空间索引 (14)
Step4. 插入空间数据 (15)
Step5. 查询 (16)
实验三简单的空间数据库示例 (20)
一、实验目的 (20)
二、实验环境 (20)
三、实验内容和要求(2课时) (20)
实验四空间数据库设计与开发示例 (22)
一、实验目的 (22)
二、实验环境 (22)
三、实验内容和要求(4课时) (22)
空间数据库实验预备知识—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_Srid
sdo_Srid也是一个NUMBER型的数值,它用于标识与几何对象相关的空间坐标系。如果sdo_Srid为空(null),则表示没有坐标系与该几何对象相关;如果该值不为空,则该值必须为MDSYS.CS_SRS表中SRID字段的一个值,在创建含有几何对象的表时,这个值必须加入到描述空间数据表元数据的USER_SDO_GEOM_METADATA视图的SRID字段中。对于我们通常使用国际标准的Longitude/Latitude(8307),Oracle Spatial规定,一个几何字段中的所有几何对象都必须为相同的sdo_Srid值。
③sdo_Point
sdo_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_Info
sdo_Elem_Info是一个可变长度的数组,每3个数作为一个元素单位,用于表示坐标是如何存储在SDO_ORDINATES数组中的。本文把组成一个元素的3个数称为3元组。一个3元组包含以下3部分的内容:
◇SDO_STARTING_OFFSET
SDO_STARTING_OFFSET 表明每个几何元素的第一个坐标在SDO_ORDINATES数组中的存储位置。它的值从1开始,逐渐增加。
◇SDO_ETYPE
SDO_ETYPE 用于表示几何对象中每个组成元素的几何类型。当它的值为1, 2, 1003和2003时,表明这个几何元素为简单元素。如果SDO_ETYPE为1003,表明该多边形为外环(第一个数为1表示外环),坐标值以逆时针存储;如果SDO_ETYPE为2003,表明该多边形为内环(第一个数为2表示内环),坐标值以顺时针存储。当SDO_ETYPE为4, 1005和2005时,表明这个几何元素为复杂元素。它至少包含一个3元组用以说明该复杂元素具有多少个几何简单元素。同样,1005表示多边形为外环,坐标值以逆时针存储;2005表示多边形为内环,坐标值以顺时针存储。
◇SDO_INTERPRETATION
SDO_INTERPRETATION具有两层含义,具体的作用由SDO_ETYPE是