资源描述:
《OracleGIS教程(PPt)OracleSpatial》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、OracleSpatial是Oracle公司推出的空间数据库组件,通过Oracle数据库系统存储和管理空间数据。Oracle从9i开始对空间数据提供了较为完备的支持。OracleSpatial简介由于OracleSpatial本身是ORACLE数据库的一个特殊的部分,因此可以用ORACLE提供的程序接口来对OracleSpatial管理的空间数据进行操作。目前,ORACLE数据库主要提供两种接口方式对其数据进行存取:ORACLE提供的面向C语言程序员的编程接口OCI(OracleCallInterface,简称OCI);用ORACLE本身所提供的OLE对象(Or
2、acleObjectsforOLE,以下简称OO4O)来快速访问有关数据库。OracleSpatial主要通过元数据表、空间数据字段(即SDO_GEOMETRY字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的函数,让用户进行更深层次的GIS应用开发。OracleSpatial使用空间字段SDO_GEOMETRY存储空间数据,用元数据表来管理具有SDO_GEOMETRY字段的空间数据表,并采用R树索引和四叉树索引技术来提高空间查询和空间分析的速度。元数据表说明OracleSpatial的元数据表存储了有空间数据的数据表名称、空间字段名称、
3、空间数据的坐标范围、坐标参考信息以及坐标维数说明等信息。用户必须通过元数据表才能知道ORACLE数据库中是否有OracleSpatial的空间数据信息。一般可以通过元数据视图(USER_SDO_GEOM_METADATA)访问元数据表。元数据视图的基本定义为:(TABLE_NAMEVARCHAR2(32),COLUMN_NAMEVARCHAR2(32),DIMINFOMDSYS.SDO_DIM_ARRAY,SRIDNUMBER);其中,TABLE_NAME为含有空间数据字段的表名,COLUMN_NAME为空间数据表中的空间字段名称,DIMINFO是一个按照空间维
4、顺序排列的SDO_DIM_ELEMENT对象的动态数组,SRID则用于标识与几何对象相关的空间坐标参考系。SDO_DIM_ELEMENT对象的定义如下所示:CreateTypeSDO_DIM_ELEMENTasOBJECT(SDO_DIMNAMEVARCHAR2(64),SDO_LBNUMBER,SDO_UBNUMBER,SDO_TOLERANCENUMBER);其中,SDO_DIMNAME是空间维名称,SDO_LB为该空间维的左下角坐标,SDO_UB为该空间维的右上角坐标,SDO_TOLERANCE为几何对象的表示精度。CREATETABLEGEOD_CITI
5、ES(LOCATIONMDSYS.SDO_GEOMETRY,CITYVARCHAR2(42),STATE_ABRVVARCHAR2(2),POP90NUMBER,RANK90NUMBER);例子INSERTINTOUSER_SDO_GEOM_METADATA(TABLE_NAME,COLUMN_NAME,DIMINFO,SRID)VALUES('GEOD_CITIES','LOCATION',MDSYS.SDO_DIM_ARRAY(MDSYS.SDO_DIM_ELEMENT('LONG',-180.0,180.0,0.0000005),MDSYS.SDO_DIM
6、_ELEMENT('LAT',-90.0,90.0,0.0000005)),NULL);空间字段解析OracleSpatial的空间数据都存储在空间字段SDO_GEOMETRY中,理解SDO_GEOMETRY是编写OracleSpatial接口程序的关键。SDO_GEOMETRY是按照OpenGIS规范定义的一个对象,其原始的创建方式如下所示。CREATETYPEsdo_geometryASOBJECT(SDO_GTYPENUMBER,SDO_SRIDNUMBER,SDO_POINTSDO_POINT_TYPE,SDO_ELEM_INFOMDSYS.SDO_EL
7、EM_INFO_ARRAY,SDO_ORDINATESMDSYS.SDO_ORDINATE_ARRAY);该对象由五个部分组成,下面分别介绍这五个部分的定义方法。(1)SDO_GTYPESDO_GTYPE是一个NUMBER型的数值,用来定义存储对象的类型。SDO_GTYPE是一个4个数字的整数,其格式为dltt,其中d表示几何对象的维数;l表示三维线性参考系统中的线性参考值,当d为3维或者4维时需要设置该值,一般情况下为空;tt为几何对象的类型,OracleSpatial定义了7种类型的几何类型,目前,tt使用了00到07(包括一种用户自定义类型),另外,08到
8、99是OracleSpa