Oracle数据库的空间数据类型

上传人:豆浆 文档编号:2038968 上传时间:2017-07-19 格式:DOC 页数:6 大小:41.50KB
返回 下载 相关 举报
Oracle数据库的空间数据类型_第1页
第1页 / 共6页
Oracle数据库的空间数据类型_第2页
第2页 / 共6页
Oracle数据库的空间数据类型_第3页
第3页 / 共6页
Oracle数据库的空间数据类型_第4页
第4页 / 共6页
Oracle数据库的空间数据类型_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《Oracle数据库的空间数据类型》由会员分享,可在线阅读,更多相关《Oracle数据库的空间数据类型(6页珍藏版)》请在金锄头文库上搜索。

1、Oracle 数据库中空间数据类型随着 GIS、CAD/CAM 的广泛应用,对数据库系统提出了更高的要求,不仅要存储大量空间几何数据,且以事物的空间关系作为查询或处理的主要内容。Oracle 数据库从 9i 开始对空间数据提供了较为完备的支持,增加了空间数据类型和相关的操作,以及提供了空间索引功能。Oracle 的空间数据库提供了一组关于如何存储,修改和查询空间数据集的SQL schema 与函数。通过 MDSYS schema 规定了所支持的地理数据类型的存储、语法和语义,提供了 R-tree 空间数据索引机制,定义了关于空间的相交查询、联合查询和其他分析操作的操作符、函数和过程,并提供了处

2、理点,边和面的拓扑数据模型及表现网络的点线的网络数据模型。Oracle 中各种关于空间数据库功能主要是通过 Spatial 组件来实现。从 9i版本开始,Oracle Spatial 空间数据库组件对存储和管理空间数据提供了较为完备的支持。其主要通过元数据表、空间数据字段(即 SDO_GEOMETRY 字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的函数,让用户进行更深层次的 GIS 应用开发。Oracle Spatial 使用空间字段SDO_GEOMETRY 存储空间数据,用元数据表来管理具有 SDO_GEOMETRY字段的空间数据表,并采用 R 树索引和四叉树索引

3、技术来提高空间查询和空间分析的速度。1、元数据表说明。Oracle Spatial 的元数据表存储了有空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标参考信息以及坐标维数说明等信息。用户必须通过元数据表才能知道 ORACLE 数据库中是否有 Oracle Spatial 的空间数据信息。一般可以通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。元数据视图的基本定义为:(TABLE_NAME VARCHAR2(32),COLUMN_NAME VARCHAR2(32),DIMINFO MDSYS.SDO_DIM_ARRAY,SRID NUMBER);其中,TA

4、BLE_NAME 为含有空间数据字段的表名,COLUMN_NAME 为空间数据表中的空间字段名称,DIMINFO 是一个按照空间维顺序排列的SDO_DIM_ELEMENT 对象的动态数组, SRID 则用于标识与几何对象相关的空间坐标参考系。SDO_DIM_ELEMENT 对象的定义如下所示:Create Type SDO_DIM_ELEMENT as OBJECT (SDO_DIMNAME VARCHAR2(64),SDO_LB NUMBER,SDO_UB NUMBER,SDO_TOLERANCE NUMBER);其中,SDO_DIMNAME 是空间维名称,SDO_LB 为该空间维的左下角坐

5、标,SDO_UB 为该空间维的右上角坐标,SDO_TOLERANCE 为几何对象的表示精度。2、空间字段说明Oracle Spatial 的空间数据都存储在空间字段 SDO_GEOMETRY 中,理解SDO_GEOMETRY 是编写 Oracle Spatial 接口程序的关键。 SDO_GEOMETRY是按照 OpenGIS 规范定义的一个对象,其原始的创建方式如下所示:CREATE TYPE sdo_geometry AS OBJECT (SDO_GTYPE NUMBER,SDO_SRID NUMBER,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSY

6、S.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);该对象由五个部分组成,下面分别介绍这五个部分的定义方法。SDO_GTYPE 是一个 NUMBER 型的数值,用来定义存储对象的类型。SDO_SRID 也是一个 NUMBER 型的数值,它用于标识与几何对象相关的空间坐标参考系,Oracle Spatial 规定,一个几何字段中的所有几何对象都必须为相同的 SDO_SRID 值。SDO_POINT 是一个包含 X,Y,Z 数值信息的对象,用于表示几何类型为点的几何对象。SDO_ELEM_INFO 是一个可变长度的数组,每 3

7、个数作为一个元素单位,用于解释坐标是如何存储在 SDO_ORDINATES 数组中的。SDO_ORDINATES 是一个可变长度的数组,用于存储几何对象的真实坐标,该数组的类型为 NUMBER 型,它的最大长度为1048576。SDO_ORDINATES 必须与 SDO_ELEM_INFO 数组配合使用,才具有实际意义。3、空间索引技术Oracle Spatial 索引主要提供两个功能:找到一个区域中的空间对象,找到两个空间对象的交集。为此,Spatial 提供了 R 树索引和四叉树索引两种索引机制来提高空间查询和空间分析的速度。RTree 索引能代替线性四叉树索引或和其一起使用。RTree

8、索引不仅仅能对 2D 数据进行索引,同时对 3D、4D 数据也可进行索引。空间 R-tree 索引最高能定位四维空间。一个 R-tree 索引近似的使用单个MBR 来代表一个地理对象。它存储在空间索引表(USER_SDO_INDEX_METADATA 视图中的 SDO_INDEX_TABLE 字段所指的空间索引表,如果你去查找那个字段内容,只会看到一堆二进制) 。同时 R-tree 索引还维护一个 sequence 对象(USER_SDO_INDEX_METADATA 表中的SDO_RTREE_SEQ_NAME 字段) 。创建 R 树索引:CREATE INDEX territory_idx

9、ON territories (territory_geom)INDEXTYPE IS MDSYS.SPATIAL_INDEX;创建四叉树索引:CREATE INDEX ROADS_FIXED ON ROADS(SHAPE) INDEXTYPE IS MDSYS.SPATIAL_INDEXPARAMETERS(SDO_LEVEL=8);4、查询模型说明Oracle Spatial 使用两层查询模型来解决查询与空间过滤的问题。模型使用两个不同目的的操作来加快查询过程。而输出的结果是这两个操作组合结果。这两个操作为 primary 与 secondary 操作:1.primary 过滤操作:使用地

10、理上近似的查询操作来减小计算的复杂度。因为这个查询是近似,所以它产生一个比较大的结果集,这个结果集是给secondary 过滤操作使用 。2.secondary 过滤操作:在 primary 过滤出来的结果集上使用精确的计算来得到最后精度的空间过滤结果集。因为这个计算过程是很昂贵的,所以它只在primary 过滤出来的结果集上计算。Spatial 使用空间索引来实现 primary 过滤。Spatial 并不强求使用一定要使用 primary 与 secondary 过滤组合。在很多情况下,光一个 primary 过滤就足够了。例如一个放大操作中,应用程序只要得到与一个矩形框相交的地理区域中的

11、内容。这时,primary 过滤就可以非常快的返回一个大集合,而应用程序可以使用减切路径来只显示出目标区域来。Spataial 使用 secondary 过滤器来决定空间关系。空间关系决定于地理位置。最通用的空间关系是基于拓扑与距离的。为了决定空间关系,Spatail 有很多secondary 过滤器: SDO_RELATE 操作指出拓扑关系。它实现了九个交叠模型在点,线与多边形中间分类两个空间对象的拓扑关系,每个对象都有包含,交叠与不包含三种。SDO_WITHIN_DISTANCE 操作决定两个空间对象是否在某个指定的距离中。SDO_NN 操作指出离某个空间对象最近的对象。SDO_WITHI

12、N_DISTANCE 操作符判断两个对象是否在一个指定的距离内,这个操作在对象的周围建立一个为指定距离的区域,然后看是否与这个区域相交。SDO_NN 操作返回在一个对象周围指定数目的最近对象。下面一个在 Oracle 中构建空间数据库并对空间数据库进行增、删、改操作的实例。通过这个实例可以看到 Oracle 中构建空间数据库功能强大,且实现十分简单。首先建立一个城市表(用来表示彼此相连的城市)和关系表(用来表示城市之间的公路) 。Create table cities(Location mdsys.sdo_geometry / 城市位置Geom mdsys.sdo_geometry, / 城市

13、边界City varchar2(42), / 城市名State_abrv varhar2(2), / 所属省份Pop number, / 人口数量Poppsqmi number); / 人口密度Create table interstates( Geom mdsys.sdo_geometry, / 城市间地形Highway varchar2(35); / 高速路名接下来将限制条件插入到 USER_SDO_GEOM_METADATA 中:Insert into USER_SDO_GEOM_METADATA(table_name, colum_name, diminfo, srid)Values(

14、 cities, location, Mdsys.sdo_dim_array(mdsys.sdo_dim_element (x, -180.000000000, 180.000000000, 0.000000050),mdsys.sdo_dim_element (y, -90.000000000, 90000000000, 0.000000050),),Null);Insert into USER_SDO_GEOM_METADATA(table_name, colum_name, diminfo, srid) Values( cities, geom, Mdsys.sdo_dim_array(

15、mdsys.sdo_dim_element (x, -180.000000000, 180.000000000, 0.000000050),mdsys.sdo_dim_element (y, -90.000000000, 90000000000, 0.000000050),),Null);Insert into USER_SDO_GEOM_METADATA(table_name, colum_name, diminfo, srid) Values( interstates, geom, Mdsys.sdo_dim_array(mdsys.sdo_dim_element (x, -180.000

16、000000, 180.000000000, 0.000000050),mdsys.sdo_dim_element (y, -90.000000000, 90000000000, 0.000000050),),Null);现在需要为数据库建立索引:Create indes idx_intestates on interstates(geom)Indextype is mdsys.spatial_indexParameters(sdo_level = 9);以上是建立空间数据库的一些工作。所有空间数据库的信息都可以在数据字典 USER_SDO_INDEX_METADATA、USER_SDO_TABLE_METADA 中得到。以后就可以对所建立的数据库进行查询、添加、修改、删除

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号