空间数据库实验指导书实验三郭明_第1页
空间数据库实验指导书实验三郭明_第2页
空间数据库实验指导书实验三郭明_第3页
空间数据库实验指导书实验三郭明_第4页
空间数据库实验指导书实验三郭明_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《空间数据库》课程实验指导书TOC\h\z\c"图表"班级学号姓名编制人:郭明单位:北京建筑大学测绘与城市空间信息学院2015年9月评分表实验一实验二实验三实验四总评目录实验指导书 1空间数据库实验预备知识—OracleSpatial简介 2一、元数据表说明 2二、空间字段解析 3三、空间索引技术 6实验一认识OracleSpatial的主要数据库对象 7一、实验目的 7二、实验环境 7三、实验步骤及分析(2课时) 9实验二空间查询 14一、 实验目的 14二、实验环境 14三、实验步骤及内容(2课时) 14Step1.创建一张表,其中shape用来存放空间数据 14Step2.在user_sdo_geom_metadata表中插入新记录,用于描述空间字段 14Step3.创建空间索引 14Step4.插入空间数据 15Step5.查询 16实验三简单的空间数据库示例 20一、实验目的 20二、实验环境 20三、实验内容和要求(2课时) 20实验四空间数据库设计与开发示例 22一、实验目的 22二、实验环境 22三、实验内容和要求(4课时) 22空间数据库实验预备知识—OracleSpatial简介OracleSpatial主要通过元数据表、空间数据字段(即sdo_Geometry字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的程序包,让用户进行更深层次的GIS应用开发。OracleSpatial使用空间字段sdo_Geometry存储空间数据,用元数据表来管理具有sdo_Geometry字段的空间数据表,并采用R树索引和四叉树索引技术来提高空间查询和空间分析的速度。一、元数据表说明OracleSpatial的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标系以及坐标维数说明等信息。用户必须通过元数据表才能知道Oracle数据库中是否有OracleSpatial的空间数据信息。通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。元数据视图的基本定义为:

其中,TABLE_NAME为含有空间数据字段的表名,COLUMN_NAME为空间数据表中的空间字段名称,DIMINFO是一个按照空间维顺序排列的SDO_DIM_ARRAY对象的动态数组,SRID则用于标识与几何对象相关的空间坐标参考系。SDO_DIM_ELEMENT对象的定义如下所示:CreateTypeSDO_DIM_ARRAYasOBJECT(SDO_DIMNAMEVARCHAR2(64),SDO_LBNUMBER,SDO_UBNUMBER,SDO_TOLERANCENUMBER);其中,SDO_DIMNAME是空间维名称,SDO_LB为该空间维的左下角坐标,SDO_UB为该空间维的右上角坐标,SDO_TOLERANCE为几何对象的表示精度。二、空间字段解析OracleSpatial的空间数据都存储在空间字段sdo_Geometry中,理解sdo_Geometry是编写OracleSpatial程序的关键。sdo_Geometry是按照OpenGIS规范定义的一个对象,其原始的创建方式如下所示。①sdo_Gtype

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

sdo_Srid也是一个NUMBER型的数值,它用于标识与几何对象相关的空间坐标系。如果sdo_Srid为空(null),则表示没有坐标系与该几何对象相关;如果该值不为空,则该值必须为MDSYS.CS_SRS表中SRID字段的一个值,在创建含有几何对象的表时,这个值必须加入到描述空间数据表元数据的USER_SDO_GEOM_METADATA视图的SRID字段中。对于我们通常使用国际标准的Longitude/Latitude(8307),OracleSpatial规定,一个几何字段中的所有几何对象都必须为相同的sdo_Srid值。③sdo_Pointsdo_Point是一个包含三维坐标X,Y,Z数值信息的对象,用于表示几何类型为点的几何对象。如果sdo_Elem_Info和SDO_ORDINATES数组都为空,则sdo_Point中的X,Y,Z为点对象的坐标值,否则,sdo_Point的值将被忽略(用NULL表示)。OracleSpatial强烈要求用sdo_Point存储空间实体为点类型空间数据,这样可以极大的优化OracleSpatial的存储性能和查询效率。④sdo_Elem_Infosdo_Elem_Info是一个可变长度的数组,每3个数作为一个元素单位,用于表示坐标是如何存储在SDO_ORDINATES数组中的。本文把组成一个元素的3个数称为3元组。一个3元组包含以下3部分的内容:SDO_STARTING_OFFSETSDO_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_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,…}的顺序排列。三、空间索引技术OracleSpatial提供R树索引和四叉树索引两种索引机制来提高空间查询和空间分析的速度。用户需要根据不同空间数据类型创建不同的索引,当空间数据类型比较复杂时,如果选择索引类型不当,将使OracleSpatial创建索引的过程变得非常慢。实验一认识OracleSpatial的主要数据库对象一、实验目的了解Oracle10g数据库中MDSYS方案的空间元数据表的结构及用途;了解对象类型MDSYS.SDO_DIM_ARRAY以及和空间元数据表的关系;掌握通过元数据视图USER_SDO_GEOM_METADATA查看空间元数据表的内容;了解对象类型MDSYS.SDO_GEOMETRY的结构及用途;了解数组类型MDSYS.SDO_DIM_ELEMENT结构及用途;了解数组类型MDSYS.SDO_ORDINATE_ARRAY结构及用途;二、实验环境在Oracle的EnterpriseManager中进行实验,打开EnterpriseManager的方法:登陆页面,出现如下登录界面:填入正确的用户名:system和口令:SYS123abc,如下图:点击下方“我同意”之后,连接主界面为下图所示:三、实验步骤及分析(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都在此程序中执行),步骤为:打开开始->程序等路径,如下图:注意改写*.ora文件中的内容,复制一段代码后将主机名改写为wJ-T登陆,填入正确的用户名:system和口令:SYS123abc,主机字符串:orcl,如下图:并运行如下SQL语句,建立一个包含MDSYS.SDO_GEOMETRY属性的表:CREATETABLESPATIALTEST_自己名字缩写(ID VARCHAR2(20)PRIMARYKEY,NAME VARCHAR2(100),ADDRESS VARCHAR2(200),TELEPHONE VARCHAR2(50),LOC MDSYS.SDO_GEOMETRY);在对应方案中找到数据表SPATIALTEST,双击查看表结构,可以看到LOCATION的数据类型是MDSYS.SDO_GEOMETRY,所以,LOCATION需要在元数据表中填写一条相关记录。(5)根据用户表填写空间元数据,并说明其实际意义。INSERTINTOUSER_SDO_GEOM_METADATAVALUES(‘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*FROMUSER_SDO_GEOM_METADATA(7)查看对象类型MDSYS.SDO_GEOMETRY的结构并记录下来,说明每个属性代表的实际意义。(8)查看数组类型MDSYS.SDO_ELEM_INFO_ARRAY的结构并记录下来。它和MDSYS.SDO_GEOMETRY对象类型有何关系?(9)查看数组类型MDSYS.SDO_ORDINATE_ARRAY的结构并记录下来。它和MDSYS.SDO_ELEM_INFO_ARRAY数组类型有何关系?(10)【加分】查看数据库实例orcl管理器中其他管理选项、数据库对象(表的建立)、程序包、用户和权限等项目的学习心得:完成时间实验过程、结果及分析得分教师签名2080实验二空间查询实验目的1.掌握空间数据表的建立的过程;2.掌握空间数据的输入方法;3.掌握空间索引的建立方法;3.掌握filter和related两个查询过程。二、实验环境实验中的SQL语句均在SQL-PLUS中执行。三、实验步骤及内容(2课时)Step1.创建一张表,其中shape用来存放空间数据CREATETABLEmylake(feature_idNUMBERPRIMARYKEY,

nameVARCHAR2(32),

shapeMDSYS.SDO_GEOMETRY);Step2.在user_sdo_geom_metadata表中插入新记录,用于描述空间字段INSERTINTOuser_sdo_geom_metadataVALUES('mylake',//表名'shape',//字段名

MDSYS.SDO_DIM_ARRAY(

MDSYS.SDO_DIM_ELEMENT('X',0,100,0.05),

//X维最小,最大值和容忍度。

MDSYS.SDO_DIM_ELEMENT('Y',0,100,0.05)

//Y维最小,最大值和容忍度

),

NULL

//坐标系,缺省为笛卡尔坐标系);Step3.创建空间索引CREATEINDEXmylake_idxONmylake(shape)INDEXTYPEISMDSYS.SPATIAL_INDEX打开创建的空间索引mylake_idx,记录索引的一般信息。Step4.插入空间数据OracleSpatial用MDSYS.SDO_GEOMETRY来存储空间数据,//插入包含一个岛屿的湖泊

INSERTINTOmylakeVALUES(10,

'Lake

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1,19,2003,1),

MDSYS.SDO_ORDINATE_ARRAY(0,0,10,0,10,10,0,10,0,0,4,4,6,4,6,6,4,6,4,4)

));//插入两艘小船INSERTINTOmylakeVALUES(11,

'TheWindswept',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),

MDSYS.SDO_ORDINATE_ARRAY(2,2,3,2,3,2,2,3,2,2)

));INSERTINTOmylakeVALUES(

12,

'BlueCrest',

MDSYS.SDO_GEOMETRY(

2003,

NULL,

NULL,

MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),

MDSYS.SDO_ORDINATE_ARRAY(7,7,8,7,8,7,7,8,7,7)

));运行SELECT*FROMMYLAKE,并记录运行结果,并说明每条记录代表什么。Step5.查询OracleSpatial查询数据包括二个处理过程:只通过索引查询候选项。通过函数SDO_FILTER实现:SDO_FILTER(geometry1MDSYS.SDO_GEOMETRY,

geometry2MDSYS.SDO_GEOMETRY,paramsVARCHAR2)geometry1:必须是被索引的几何数据geometry2:不一定是表中的空间字段,也不要求被索引params:Filter类型

querytype=WINDOW:geometry2不要求来自表

querytype=JOIN:geometry2必须来自表运行下列SQL语句,并记录结果,并说明这个结果这代表什么意义?SELECTnameboat_nameFROMmylaketWHEREfeature_id=11ANDSDO_FILTER(t.shape,mdsys.sdo_geometry(2003,NULL,NULL,mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2,5,2,5,5,2,5,2,2)),

'querytype=WINDOW')='TRUE';再检查每个候选项是否和条件精确匹配。通过函数SDO_RELATE实现:SDO_RELATE(geometry1MDSYS.SDO_GEOMETRY,geometry2MDSYS.SDO_GEOMETRY,paramsVARCHAR2)params:masktype类型DISJOINT—theboundariesandinteriorsdonotintersectTOUCH—theboundariesintersectbuttheinteriorsdonotintersectOVERLAPBDYDISJOINT—theinteriorofoneobjectintersectstheboundaryandinterioroftheotherobject,butthetwoboundariesdonotintersect.Thisrelationshipoccurs,forexample,whenalineoriginatesoutsideapolygonandendsinsidethatpolygon.OVERLAPBDYINTERSECT—theboundariesandinteriorsofthetwoobjectsintersectEQUAL—thetwoobjectshavethesameboundaryandinteriorCONTAINS—theinteriorandboundaryofoneobjectiscompletelycontainedintheinterioroftheotherobjectCOVERS—theinteriorofoneobjectiscompletelycontainedintheinterioroftheotherobjectandtheirboundariesintersectINSIDE—theoppositeofCONTAINS.AINSIDEBimpliesBCONTAINSA.COVEREDBY—theoppositeofCOVERS.ACOVEREDBYBimpliesBCOVERSA.ON—theinteriorandboundaryofoneobjectisontheboundaryoftheotherobject(andthesecondobjectcoversthefirstobject).Thisrelationshipoccurs,forexample,whenalineisontheboundaryofapolygon.ANYINTERACT—theobjectsarenon-disjoint.运行下列SQL语句,并记录结果,并说明这个结果这代表什么意义?//选择在定义矩形内的所有小船SELECTnameboat_nameFROMmylaketWHEREfeature_id=12ANDSDO_FILTER(t.shape,mdsys.sdo_geometry(2003,NULL,NULL,mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2,5,2,5,5,2,5,2,2)),

'querytype=WINDOW')='TRUE'ANDSDO_RELATE(t.shape,mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,1),

mdsys.sdo_ordinate_array(2,2,5,2,5,5,2,5,2,2)),

'mask=INSIDEquerytype=WINDOW')='TRUE'运行结果和分析://masktype可联合使用SELECTnameboat_nameFROMmylaketWHEREfeature_id=11A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论