gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2552回复:4

Oracle Spatial对GIS的支持分析

楼主#
更多 发布于:2007-07-13 17:33
<P><FONT face=宋体 size=2> </FONT></P>
<P >作为一种优秀的对象关系型数据库,Oracle 9i提供的空间数据组件Oracle Spatial具有对空间数据能迅速有效地存储、查询及分析的一系列函数和过程, 因此可利用Oracle Spatial把空间实体的空间数据和属性数据存入同一个数据库中,同时建立空间数据索引,从而实现GIS数据的一体化存储和管理。</P>
<P >Oracle Spatial由以下组件构成: </P>
<P >a)MDSYS:一种用于规定Oracle所支持的空间数据类型称为的存储、语法、语义的模式;</P>
<P >b)一种空间索引机制;</P>
<P >c)一组用于处理空间区域的交叉、合并和联接的操作符和函数集;</P>
<P >d)一组实用管理工具。</P>
<P >Oracle Spatial主要通过元数据表、空间数据字段(即SDO_GEOMETRY字段)和空间索引来管理空间数据,并在此基础上提供一系列空间查询和空间分析的函数,让用户进行更深层次的GIS应用开发。Oracle Spatial使用空间字段SDO_GEOMETRY存储空间数据,用元数据表来管理具有SDO_GEOMETRY字段的空间数据表,并采用R树索引和四叉树索引技术来提高空间查询和空间分析的速度。</P>
<P >1. Oracle Spatial的空间数据存储结构</P>
<P >Oracle Spatial的空间数据存储结构是一个空间图层、几何体和元素组成的层次结构。其中空间图层由具有相同属性集的几何体构成,每层的几何体和相关的空间索引存储在数据库标准的表中;几何体由元素组成,元素是几何体的基本组成部分,元素的位置由坐标数据来确定。空间图层表示不同的要素类。在Oracle Spatial中,每一个图层对应于一个或者一组表,一个层中所有几何体都应该具有相同的空间属性;几何体是类型MDSYS.SDO_GEOMETRY的实例,并存储在表中特定的行和列中;Oracle Spatial支持的空间元素类型包括点、线串、多边形、复合线串、复合多边形、圆、弧线串以及弧多边形,类型MDSYS.SDO_GEOMETRY存储点、线、多边形;坐标数据表示空间元素的(x,y)或者经纬度坐标对。</P>
<P >2. Oracle Spatial的空间数据模型</P>
<P >Oracle Spatial的空间数据都存储在空间字段SDO_GEOMETRY中,理解SDO_GEOMETRY是编写Oracle Spatial接口程序的关键。SDO_GEOMETRY是按照Open2GIS规范定义的一个对象,它的定义如下:</P>
<P >CREATETYPESDO_GEOMETRYASOBJECT(</P>
<P >SDO_GTYPENUMBER,</P>
<P >SDO_SRIDNUMBER,</P>
<P >SDO_POINTSDO_POINT_TYPE,</P>
<P >SDO_ELEM_INFOMDSYS.SDO_ELEM_INFO_ARRAY,</P>
<P >SDO_ORDINATESMDSYS.SDO_ORDINATE_ARRAY);</P>
<P >其中,SDO_GTYPE说明该空间实体的类型;SDO_SRID记录图形的坐标系统;SDO_POINT定义为变长数组,存储点对象的坐标;SDO_ELEM_INFO也定义为变长数组,每三个数作为一个元素单位,用于解释坐标是如何存储在SDO_ORDINATES数组中的;SDO_ORDINATES定义为一个可变长的数组,数组元素类型为NUMBER,用来存储组成空间实体边界的点的坐标值。Oracle Spatial建议用SDO_POINT存储空间实体为点类型空间数据,这样可以极大地优化Oracle Spatial的存储性能,提高查询效率。如果SDO_ELEM_INFO和SDO_ORDINATES数组都为空,则SDO_POINT中的X,Y,Z为点对象的坐标值,否则,SDO_POINT的值可以忽略(用NULL表示)。SDO_POINT_TYPE的定义如下:</P>
<P >CREATETYPESDO_POINT_TYPEASOBJECT(</P>
<P >XNUMBER,</P>
<P >YNUMBER,</P>
<P >ZNUMBER);</P>
<P >SDO_ELEM_INFO_ARRY中每三个数作为一个元素,它们所代表的含义如下:SDO_STARTING_OFFSET表明每个几何元素的第一个坐标在SDO_ORDINATES数组中的存储位置;SDO_ETYPE用于表示几何对象中每个组成元素的几何类型;SDO_INTERPRETATION具有两层含义,具体的作用由SDO_ETYPE是否为复杂元素决定。如果SDO_ETYPE是复杂元素(4,1005和2005),则SDO_INTERPRETATION表示它后面有几个子三元组属于这个复杂元素。如果SDO_ETYPE是简单元素(1,2,1003和2003),则SDO_INTERPRETATION表示该元素的坐标值在SDO_ORDINATES中是如何排列的。它的定义如下:</P>
<P >CREATETYPESDO_ELEM_INFO_ARRAY AS VARRAY (1048576) OF NUMBER;SDO_ORDINATES必须与SDO_ELEM_INFO数组配合使用,才具有实际意义。SDO_ORDINATES的坐标存储方式由几何对象的维数决定,它的定义如下:</P>
<P >CREATETYPESDO_ORDINATE_ARRAY AS VARRAY(1048576) OF NUMBER;</P>
<P >3. Oracle Spatial的坐标系数据结构</P>
<P >Oracle Spatial支持大地测量坐标和非大地测量坐标,Oracle Spatial支持超过950种常用的映射坐标系统,同时还支持用户定义的坐标系统。它能将矢量对象的地图投影从一个坐标系统精确地转换到另一个坐标系统。这些()个转换可以在几何层或者整个层表进行。Oracle Spatial提供了MDSYS.CS_SRS表来管理所有有效的空间坐标系,MDSYS.CS_SRS表结构如下:</P>
<P >(</P>
<P >CS_NAMEVARCHAR2(68),</P>
<P >SRIDNUMBER(38),</P>
<P >AUTH_SRIDNUMBER(38),</P>
<P >AUTH_NAMEVARCHAR2(256),</P>
<P >WKTEXTVARCHAR2(2046),</P>
<P >CS_BOUNDSMDSYS.SD0_GEOMETRY</P>
<P >)</P>
<P >4. Oracle Spatial空间索引机制</P>
<P >Oracle Spatial提供了R树索引和四叉树索引两种索引机制来提高空间查询和空间分析的速度,用户需要根据空间数据的不同类型创建不同的索引。Oracle Spatial对空间数据的各个图层建立索引时,索引机制一般采用R树索引,将所查询的空间几何图形用包含几何图形的最()小边界矩形MBR进行覆盖,以确定空间几何图形的范围。Oracle建议采用R树索引,并且在Oracle10g已经摒弃了四叉树索引。建立R树索引:</P>
<P >CREATE INDEX TERR TORY_INDX ON TERR TOR IES(TERRITORY_GEOM)</P>
<P >INDEXTYPE IS MDSYS SPATIAL_INDEX;</P>
<P >5. Oracle Spatial空间元数据结构</P>
<P >Oracle Spatial的元数据表存储了空间数据的数据表名称、空间字段名称、空间数据的坐标范围、坐标参考信息以及坐标维数说明等信息。用户必须通过元数据表才能知道Oracle数据库中是否有Oracle Spatial的地理空间数据信息。Oracle Spatial提供一个全局表(对象关系模式,该表为MDSYS模式所有)来管理系统中所有空间数据的元数据,与空间数据表相关的信息都存储在元数据表MDSYS.SDO_GEOM_METADATA_TABLE中,但是我们不能直接更改这个表,一般可以通过元数据视图来访问元数据。元数据视图有以下3个:</P>
<P >1)USER_SDO_GEOM_METADATA:该视图对所有用户的元数据进行管理。这也是用户惟一且必须维护的数据。</P>
<P >2)ALL_SDO_GEOM_METADATA:该视图包含所有的具有SELECION许可用户空间数据的元数据信息。</P>
<P >3)DBA_SDO_GEOM_METADATA:该视图包含拥DBA (Database Administrator)权限、所有的具有选择许可的用户的空间数据的元数据信息。USER_SDO_GEOM_METADATA元数据视图的基本定义为:</P>
<P >(</P>
<P >TABLE_NAME VARCHAR2(40),</P>
<P >COLUMN_NAME VARCHAR2(40),</P>
<P >DMNFO MDSYS.SDO_DIM_ARRAY,</P>
<P >SRID NUMBER</P>
<P >);</P>
<P >其中,TABLE_NAME是含有空间数据字段的表的名称;COLUMN_NAME是存储空间数据的列的名称;SDO_DIM_INFO是一个按照空间维顺序排列的SDO_DIM_EL2EMENT对象的动态数组;SRID是用于标识与几何对象相关的空间坐标参考系。SDO_DIM_ELEMENT的定义如下:</P>
<P >CREATETYPESDO_DIM_ELEMENTASOBJECT(</P>
<P >SDO_DIMNAME VARCHAR2(64),</P>
<P >SDO_LB NUMBER,</P>
<P >SDO_UB NUMBER,</P>
<P >SDO_TOLERANCE NUMBER)</P>
<P >其中,SDO_DIMNAME是空间维的名称,SDO_LB是该空间维的左下角坐标,SDO_UB是该空间维的右上角坐标,SDO_TOLERANCE为几何对象的表示精度。SDO_TOLERANCE是一个非常重要的参数,必须赋予它适当的数值,否则会出现偏差甚至错误。例如查询2测绘学院周围10km以内的银行业务点,假设某一营业2厅距离为10.1km,设置的SDO_TOLERANCE值为100m或者更大,那么这个营业厅将被包含在查询结果中。但是如果SDO_TOLERANCE的值设置的小于100m,那么它将不包含在查询结果中。空间数据库用户负责更新这些视图,当更新USER_SDO_GEOM_METADATA后,Oracle Spatial负责更新另外两个视图中的相应列。</P>
<P >6. Oracle Spatial空间数据管理</P>
<P >Oracle Spatial管理空间数据的方法是:提供一个MDSYS模式,在其中包含了关于空间数据管理的所有内()容,即提供一个对象数据类型SDO_GEOMETRY、空间索引功能及多个针对SDO-GEOMETRY的函数/运算符等。</P>
<P >在Oracle Spatial中通过空间元数据表和空间数据表共同管理空间数据。空间数据表(其中已列为SDO_GE2OMETRY类型)存储数据,空间元数据表管理空间数据表,对各空间数据表进行描述,每一条记录描述了一张空间数据表的信息。</P>
<DIV >在GIS中,每幅地图根据不同的要素类可以分成不同的空间图层。相应的在Oracle Spatial中,为每幅地图建立一个元数据表,为每个空间图层建立一个元数据表。地图数据采用MapInfo公司的.tab文件格式存储,可以通过Map Info Professional的Easy Loader将空间数据层上传到Oracle Spatial中。通过Easy Loader上传空间数据层后,Oracle会自动建立一个MapInfo用户。</DIV>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2007-07-16 18:38
<img src="images/post/smile/dvbbs/em07.gif" />
举报 回复(0) 喜欢(0)     评分
zjs200220032004
路人甲
路人甲
  • 注册日期2003-11-19
  • 发帖数41
  • QQ
  • 铜币234枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2007-07-17 08:21
<img src="images/post/smile/dvbbs/em01.gif" />
举报 回复(0) 喜欢(0)     评分
whmwxhanshan123
路人甲
路人甲
  • 注册日期2006-06-17
  • 发帖数3108
  • QQ
  • 铜币6445枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2007-07-22 16:50
<img src="images/post/smile/dvbbs/em06.gif" />
举报 回复(0) 喜欢(0)     评分
XIXI966
路人甲
路人甲
  • 注册日期2005-03-09
  • 发帖数12
  • QQ
  • 铜币104枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2007-07-25 21:44
<img src="images/post/smile/dvbbs/em02.gif" />   看不懂`~太高深了
举报 回复(0) 喜欢(0)     评分
游客

返回顶部