您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > mapinfo-一种Oracle空间数据库的设计与实现
1一种Oracle空间数据库的设计与实现雷英杰,王涛(空军工程大学导弹学院计算机系陕西三原713800)摘要:本文介绍了如何用Oraclespatial建立一空间数据库,并对数据库中的数据进行维护。文中给出了详细的设计实例。关键词:Oracle;Spatial;数据库中图分类号:TP393文献标识码:A文章编号:DesignandImplementationofanOracleSpatialDatabaseSystemLEIYing-jie,WANGTao(TheMissileInstituteofAirForceEngineeringUniversity,SanyuanShaanxi713800,China)AbstractThispaperpresentshowtousetheOraclespatialtoestablishthespacedatabaseandmaintainthedatainthedatabase,anddemonstratesanexamplefordesigningindetail.Keywords:Oracle;Spatial;Database随着GIS、CAD/CAM的广泛应用,要求存储大量空间几何数据,而大多数数据库不具备这种对空间数据的存储和管理功能,这就导致了在许多开发软件中必须提供一种小型数据库软件,以实现对空间几何数据的管理,但是这种小型数据库软件功能上相对较弱,在实现上有一定困难。现在Oracle8i对这个问题给予了很好解决,在Oracle8i的企业版中具有spatial模块,可以实现空间几何数据的相关存储,方便的实现对空间几何数据的管理。1.空间图层在Oracle数据库中空间几何数据按照空间图层、几何图形、元素来分层组织。空间图层是由几何图形构成,而几何图形是由元素来构成的。在Oraclespatial中支持的元素包括:点、直线、曲线、复合线、自相交线、多边形、复杂多边型、复合多边形(中空多边型、并列多边型)。2.查询和索引在Oraclespatial中,对空间几何数据的查询分为两步:(1)根据条件检索出要查询内容的范围,在服务器端完成;(2)在第一步所查询的范围中进一步检索,找出所要查询的空间几何数据,在服务器或客户端进行。图1小方格覆盖在spatial中必须使用索引来完成第一步查询工作,一般使用二叉树索引方式,将所查询的空间几何图形用小方格进行覆盖,以确定空间几何图形的范围。如图1所示。索引又可以分为固定2索引和混合索引。固定索引就是进行索引时,对所有图形都进行相同小方格的覆盖,以进行索引;而混合索引只是对重点区域进行进一步的方格覆盖,以进行索引。3.空间数据对象在Oraclespatial存储对象可以分成对象关系模式和关系模式两种形式,其主要区别为:对象关系模式下用列来存储对象,而关系模式下用二维表来存储对象,主要用于分布式数据库中。现在我们介绍对象关系模式下建立数据对象的语法。3.1建表建表的基本语法为CREATETABLEtable_name(column_namedata_type…)其中系统定义了一个数据类型SDO_GEOMETRY,包括SDO_GTYPE、SDO_SRID、SDO_POINT、SDO_ELEM_INFO、SDO_ORDINATES共五个子类型。SDO_GTYPE是一个number型的结构,用来定义所存储对象的类型。0Spatial中为定义的数据类型1点2直线3多边形4多种形状集合(点、线、多边形)5多点6多线7多种多边形在spatial中将所表示的空间几何数据的维数作为SDO_GTYPE的第一个数据。例如,2001表示二维数据的一个点;3002表示三维数据的一条直线。SDO_SRID是一个number型结构,用来存放系统ID,进行系统维护时使用的。SDO_POINT是一个以坐标形式来定义点的数据结构,只有当SDO_ELEM_INFO,SDO_ORDINATES为null时才有效。SDO_ELEM_INFO是用来描述空间几何数据性质的数据结构,是一个数组,其中每三个数来共同表示一种空间几何的性质。这三个数的意义分别是:Ordinateoffset表示第一个元素的纵坐标;elementtype和interpretation共同表示数据性质。详见下表:numberelementtypeinterpretation1点2线1:直线2:弧线31003:内部2003:外部多边形1:直线2:弧线3:矩形4:圆形4复杂线251005:内部2005:外部复杂多边型2在spatial中对于复杂多边型必须先用一组数来定义图形属性,然后在分别定义多边型的每一段的属性。如图2所示。3图2复杂多边形描述3.2视图Spatial在定义了数据结构的同时还定义了USER_SDO_GEOM_METADATA的系统视图,用户建立的每一个空间数据表,都是这个视图的一行,方便用户来生成图层,同时用户也可以将每个图层的条件放入视图,以防输入数据出错。视图包括:表名、列名、空间数据信息和ID。其中空间数据包括SDO_DIMNAME(维数名)、SDO_LB(数据下限)、SDO_UP(数据上限)、SDO_TOLERANCE(允许误差)。3.3索引建立索引的语法为:CREATEINDEXindex_nameONtable_name(column_name)INDEXTYPEISMDSYS.SPATIAL_INDEXPARAMETERS(‘SDO_LEVEL=LEVEL,SDO_NUMTITLES=numtitlesSDO_COMMIT_INTERNAL=N,[(Parameterparam_value…)]’);其中:SDO_LEVEL:对所选图形进行固定索引时,覆盖小方格的大小,level0为整个图形,level1为四分之一大小…SDO_NUMTITLES:对所选图形进行混合索引时,覆盖小方格的大小,对于点集来说,一般为1,对于非点集时,一般大于4。SDO_COMMIT_INTERNAL:为进行多少次索引时,就对数据库进行提交。默认值为-1,进行完整个事务后,才进行提交。Parameter:用来设置关于索引的存储参数。4.程序实例下面给出一个在Oracle8.1.5中构建空间数据库,并对空间数据库进行增、删、改操作的实例。通过这个实例可以看到在Oracle中构建空间数据库功能强大,但实现却十分简单。首先建立一个城市表(用来表示彼此相连的城市)和关系表(用来表示城市之间的公路)。CREATETABLECITIES(LOCATIONMDSYS.SDO_GEOMETRY//城市位置GEOMMDSYS.SDO_GEOMETRY,//城市边界CITYVARCHAR2(42),//城市名STATE_ABRVVARCHAR2(2),//所属省份POPNUMBER,//人口数量POPPSQMINUMBER);//人口密度CREATETABLEINTERSTATES(GEOMMDSYS.SDO_GEOMETRY,//城市间地形HIGHWAYVARCHAR2(35));//高速路名(x2,y2)(x4,y4)(x3,y3)(x6,y6)(x5,y5)(x1,y1)4接下来我们将限制条件插入到USER_SDO_GEOM_METADATA中:INSERTINTOUSER_SDO_GEOM_METADATA(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('CITIES','LOCATION',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',-180.000000000,180.000000000,0.000000050),MDSYS.SDO_DIM_ELEMENT('Y',-90.000000000,90.000000000,0.000000050)),NULL);INSERTINTOUSER_SDO_GEOM_METADATA(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('CITIES','GEOM',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',-180.000000000,180.000000000,0.000000050),MDSYS.SDO_DIM_ELEMENT('Y',-90.000000000,90.000000000,0.000000050)),NULL);INSERTINTOUSER_SDO_GEOM_METADATA(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('INTERSTATES','GEOM',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('X',-180.000000000,180.000000000,0.000000050),MDSYS.SDO_DIM_ELEMENT('Y',-90.000000000,90.000000000,0.000000050)),NULL);现在我们需要为数据库建立索引:CREATEINDEXIDX_INTERSTATESONINTERSTATES(GEOM)INDEXTYPEISMDSYS.SPATIAL_INDEXPARAMETERS('SDO_LEVEL=9');以上是我们建立空间数据库的一些工作。所有空间数据库的信息都可以在数据字典USER_SDO_INDEX_METADATA、USER_SDO_TABLE_METADATA中得到。以后我们就可以对所建立的数据库进行查询、添加、修改、删除的工作了。因为这些工作,是应用SQL语句对数据库进行操作,所以这里就不赘述了。5.结束语本文介绍了Oraclespatial的基本概念,详细阐明了用Oraclespatial设计空间数据库的方法和过程,并给出了设计实例。本文所提供的程序均在WindowsNT4.0和Oracle8.1.5中调试通过。参考文献[1]ThereferenceofOraclespatial,[2]孙宏昌等.Oracle应用系统开发[M].北京:清华大学出版社,2000.[3]欧阳为民,郑诚,蔡庆生.数据库中加权关联规则的发现[J].软件学报2001,(4):612-619.[4]张巨,刘雨.MapInfo空间数据库技术分析[J].微型电脑应用,1999,(10).[5]谢榕.地理信息系统中空间数据库建立的关键技术[J].北京测绘,1998,(4).[6]ChristianBöhm,Acostmodelforqueryprocessinginhighdimensionaldataspaces[J],ACMTransactionsonDatabaseSystems,2000,25(2):129-178基金项目:军队重点科研基金项目。雷英杰,男,[1956-],教授,博士生导师。主要从事人工智能与专家系统、网络与数据库技术研究。王涛,男,[1976-],计算机应用专业硕士研究生。主要从事网络与数据库技术研究。
本文标题:mapinfo-一种Oracle空间数据库的设计与实现
链接地址:https://www.777doc.com/doc-8284 .html