《空间数据库基础.ppt》由会员分享,可在线阅读,更多相关《空间数据库基础.ppt(68页珍藏版)》请在三一办公上搜索。
1、空间数据库基础,陈斌,主要内容,概述(1)数据库系统(3)空间数据库基础(3)Oracle Spatial简介(1)课程重点,Oracle Spatial简介,1-Oracle Spatial概念2-数据类型和元数据3-索引和查询空间数据4-坐标系统,1 Oracle Spatial概念,Oracle Spatial数据模型查询模型空间数据索引空间关系和条件空间聚集函数地理编码Geocoding,1.1 Oracle Spatial,Oracle Spatial是什么?一系列函数和过程的集合,在Oracle9i数据库中实现了对空间信息的存储、访问和分析提供了SQL模式和函数来实现Feature
2、 Collection的存储、检索、更新和查询Oracle Spatial的组成实现模式(MDSYS)规定了支持的几何数据类型的存储、语法和语义空间索引机制,1.1 Oracle Spatial,Oracle Spatial的组成一套运算符和函数进行感兴趣区域查询,空间连接查询和其它空间分析操作管理工具对象关系模型Object Relational ModelSpatial采用对象关系模型表示几何对象定义类型为MDSYS.SDO_GEOMETRY的字段每个几何对象无需占用多行存储对应OpenGIS Feature实现规范中的“SQL92+Geometry”Feature实现方案,1.1 Ora
3、cle Spatial,对象关系模型的优势支持丰富的几何对象类型包括圆弧arc,圆circle,混合多边形compound polygon,混合折线段compound line string,以及优化的矩形易于创建和维护空间索引以及构造空间查询空间索引由Oracle9i数据库服务器自动维护几何对象可以保存在单条记录的单个字段优化的性能,1.1 Oracle Spatial,Spatial支持的几何对象类型Point,point clusterLine stringPolygonArc line stringArc polygonCompound polygonCompound line str
4、ingCircleRectangle,1.1 Oracle Spatial,Spatial支持3维和4维几何对象类型仅实现存储和索引空间函数仅对前两维坐标操作空间运算符对多于两维的对象无效Spatial的层次结构数据模型高层次的对象由低一层次的对象构成包括元素element,几何形geometry和图层layer三个层次,1.2 数据模型,元素Element构成几何形对象的零件,包括点、折线段和多边形多边形按照顶点排列顺序分为外部多边形和内部多边形,顺时针为内,逆时针为外一个内多边形和若干外多边形组成带洞的多边形几何形GeometryGeometry代表一个地物,由若干顺序排列的元素构成构成元
5、素可以是单个、多个同类型或者多个不同类型,1.2 数据模型,图层Layer图层是若干具有相同属性的几何形的集合人口密度、道路桥梁网络等图层的几何形和相关的空间索引都保存在标准的数据库表中坐标系Coordinate System(空间参照系)空间数据都具有坐标系属性,坐标系可以是地理相关的,也可以和地理无关地理相关的坐标数据有长度单位地理无关即平面直角坐标(笛卡尔坐标),1.2 数据模型,坐标系Coordinate System(空间参照系)Spatial支持四种坐标笛卡尔坐标Cartesian coordinate平面直角坐标,是几何形的缺省坐标系地理坐标geodetic coordinate
6、经纬度坐标,与大地基准点相关投影坐标projected coordinate对应不同的应用目的,有多种投影方式局部坐标local coordinate非地理应用,如CAD等,1.2 数据模型,容差Tolerance容差值用来设定空间数据在运算时的精度反映了两个分离的点被考虑为重合的距离对于地理数据,容差值的单位是米对于非地理数据,容差值的单位和坐标系的单位一致越小的容差值对应越高的运算精度可以在图层元数据和某些空间运算参数中设定容差值,地理数据的容差值和具体的应用相关对于非地理数据,容差值可以设定为数据最高精度的0.5倍,1.2 数据模型,容差Tolerance在地理数据中设定过大的容差可能引
7、起多边形相对边重合而错误容差示例a,b的实际距离为0.846049894,应用距离函数SDO_GEOMETRY.DISTANCE如果图层容差为0.005,返回0.846049894如果容差设定为0.5,返回0,0.5,1.3 查询模型,Spatial采用两级查询模型来实现空间查询和空间连接空间查询分为两个独立的操作,两次操作的结果合成为最终结果两个操作分别称为主过滤Primary filter和次过滤Secondary filter主过滤先进行粗略的比较,快速生成查询结果的候选几何对象集合,计算代价小次过滤对来自主过滤的候选集合进行精确的匹配,生成精确的最终结果,计算代价高,但主过滤大大降低了
8、计算复杂度,1.3 查询模型,Spatial采用空间索引来实现主过滤,快速从大量数据集中找出查询结果的候选集某些操作可以只进行代价低的主过滤,如地图显示的缩放所需进行的查询,1.4 空间索引,Oracle Spatial的两种空间索引R树R-tree四叉树quadtree分别适合不同的应用场合可以在一个几何字段上同时创建两种索引使用ALTER INDEX的add_index参数在空间运算中可以指定使用哪个索引如SDO_RELATE的idx_tab1/idx_tab2选项,1.4 空间索引,R-tree和quadtree比较,1.5 空间关系和条件,Spatial在次过滤中实现几何形之间的空间关
9、系运算Spatial提供了几个次过滤方法实现空间关系SDO_RELATE测试拓扑关系SDO_WITHIN_DISTANCE测试两个空间对象是否在指定的距离范围内SDO_NN确定一个空间对象的最近邻居SDO_RELATE采用9交叉模型来表达点线面之间的空间关系空间关系可以进行组合,1.5 空间关系和条件,SDO_RELATE,1.5 空间关系和条件,SDO_WITHIN_DISTANCE先创建B的缓冲区D,再判定A和D是否相离SDO_NN返回指定个数的距离A最近的对象,1.6 空间聚集函数,定义空间聚集函数作用于包含若干几何对象的查询结果,返回单个SDO_GEOMETRY对象示例:返回查询结果的
10、最小包围盒select SDO_AGGR_MBR(shape)from cola_marketSDOAGGRTYPE类型多数空间聚集函数以SDOAGGRTYPE类型为参数,CREATE TYPE sdoaggrtype AS OBJECT(geometry MDSYS.SDO_GEOMETRY,tolerance NUMBER);,1.6 空间聚集函数,SDOAGGRTYPE类型示例SELECT SDO_AGGR_UNION(MDSYS.SDOAGGRTYPE(c.shape,0.005)FROM cola_markets c WHERE c.name cola_d;容差值确定了进行聚集操作时
11、的精确度,1.6 空间聚集函数,空间聚集函数包括了SDO_AGGR_CENTROIDSDO_AGGR_CONVEXHULLSDO_AGGR_LRS_CONCATSDO_AGGR_MBRSDO_AGGR_UNION,1.7 地理编码geocoding,定义将邮政地址转换为标准化的地址、坐标位置Spatial可以与地理编码服务供应上的软件集成,实现地理编码的功能,2 数据类型和元数据,示例:插入/索引/查询SDO_GEOMETRY对象类型Geometry示例Geometry元数据结构度量单位,2.1 示例:插入/索引/查询,可乐市场分析,2.1 示例:插入/索引/查询,创建Feature表“可乐市
12、场”,create table cola_markets(mkt_id number primary key,name varchar(32),shape MDSYS.SDO_GEOMETRY),2.1 示例:插入/索引/查询,插入记录,insert into cola_markets values(1,cola_a,MDSYS.SDO_GEOMETRY(2003,-2维多边形 NULL,NULL,MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,3),-矩形,外部 MDSYS.SDO_ORDINATE_ARRAY(1,1,5,7)-顶点数据);insert into cola
13、_markets values(.,2.1 示例:插入/索引/查询,更新元数据视图创建空间索引前必需工作,相当于创建图层,insert into USER_SDO_GEOM_METADATA values(cola_markets,shape,MDSYS.SDO_DIM_ARRAY(-20 x20网格 MDSYS.SDO_DIM_ELEMENT(X,0,20,0.005),MDSYS.SDO_DIM_ELEMENT(Y,0,20,0.005),NULL-SRID);,2.1 示例:插入/索引/查询,创建空间索引,create index cola_spatial_idxon cola_mark
14、ets(shape)indextype is MDSYS.SPATIAL_INDEX;-建立r-tree索引-下面的语句建立quadtree索引-parameters(SDO_LEVEL=8);,2.1 示例:插入/索引/查询,查询示例返回a/c市场的交select SDO_GEOM.SDO_INTERSECTION(c_a.shape,c_c.shape,0.005)from cola_markets c_a,cola_markets c_cwhere c_a.name=cola_a and c_c.name=cola_c;返回所有市场的面积select name,SDO_GEOM.SDO_
15、AREA(shape,0.005)from cola_markets,2.2 SDO_GEOMETRY类型,定义,create type SDO_GEOMETRY as object(SDO_GTYPE number,SDO_SRID number,SDO_POINT SDO_POINT_TYPE,SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY,SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY);create type SDO_POINT_TYPE as object(X number,y number,z number);creat
16、e type SDO_ELEM_INFO_ARRAY as varray(1048576)of number;create type SDO_ORDINATE_ARRAY as varray(1048576)of number;,2.2 SDO_GEOMETRY类型,SDO_GTYPE指明了geometry的类型,对应OGIS几何对象模型中的类型是一个4位数字,格式为dltt,其中:d代表geometry的维数:2,3,4l代表线性参照系LRS测量维度,非LRS为0tt指明了geometry的类型,00-07,08-99保留geometry的几个方法可以返回类型值GET_DIMS,GET_LR
17、S_DIM,GET_GTYPE,2.2 SDO_GEOMETRY类型,SDO_GTYPE,2.2 SDO_GEOMETRY类型,SDO_SRIDSDO_SRID用来确定geometry所对应的空间参照系null代表不对应任何参照系非空值必需参照MDSYS.CS_SRS表的SRID字段,同时需要存入USER_SDO_GEOM_METADATA表的SRID字段在同一个字段里的所有geometry对象都必须具有相同的SRID,2.2 SDO_GEOMETRY类型,SDO_POINT为了性能优化而设置的如果SDO_ELEM_INFO和SDO_ORDINATES成员都为空的话,SDO_POINT就是一个
18、POINT对象的坐标值,否则SDO_POINT被忽略如果图层中仅有POINT对象的话,强烈建议将坐标值存放在SDO_POINT中,2.2 SDO_GEOMETRY类型,SDO_ELEM_INFO是一个变长的数值数组,说明SDO_ORDINATES成员中数值的意义每三个数值为一个单元,分别是:SDO_STARTING_OFFSET:元素坐标值从SDO_ORDINATES数组第几个数开始,=1SDO_ETYPE:说明元素的类型,1/21003/2003表明是一个简单元素;4/1005/2005表明是一个复合元素SDO_INTERPRETATION:当ETYPE=1003/2003,指明解释SDO_
19、ORDINATES的方式;当ETYPE=1005/2005,指明后面的几个单元构成复合元素,2.2 SDO_GEOMETRY类型,SDO_ORDINATES存放坐标值,如何解释由SDO_ELEM_INFO来指明有效性约束GTYPE=d001/d005(点),则ETYPE=1GTYPE=d002/d006(线),则ETYPE=2/4GTYPE=d003/d007(面),则ETYPE=3/5/1003/2003/1005/2005,2.3 geometry示例,矩形rectangleSDO_GTYPE=2003SDO_SRID=NULLSDO_POINT=NULLSDO_ETYPE=(1,1003
20、,3)1指明本元素坐标偏移量1003表明是简单元素,外部多边形3表明是rectangle,只需要两对坐标SDO_ORDINATES=(1,1,5,7),2.3 geometry示例,带洞的多边形polygon with a holeSDO_GTYPE=2003SDO_SRID=NULLSDO_POINT=NULLSDO_ETYPE=(1,1003,1,19,2003,1)1,1003,1:从1开始取坐标的外部多边形/直线连接19,2003,1:从19开始取坐标的内部多边形/直线连接SDO_ORDINATES=(2,4,4,3,10,3,13,5,13,9,11,13,5,13,2,11,2,4
21、,7,5,7,10,10,10,10,5,7,5).,2.3 geometry示例,混合折线compound line stringSDO_GTYPE=2002/线SDO_SRID=NULLSDO_POINT=NULLSDO_ETYPE=(1,4,2,1,2,1,3,2,2)1,4,2:从1开始取坐标复合折线,2段构成1,2,1:从1开始取坐标简单线,直线,直到33,2,2:从3开始取坐标简单线,圆弧,直到最后SDO_ORDINATES=(10,10,10,14,6,10,14,10),直线,圆弧,2.3 geometry示例,混合多边形compound polygonSDO_GTYPE=20
22、03/面SDO_SRID=NULLSDO_POINT=NULLSDO_ETYPE=(1,1005,2,1,2,1,5,2,2)1,1005,2:从1开始取坐标复合多边形,2段构成1,2,1:从1开始取坐标简单线,直线,直到55,2,2:从5开始取坐标简单线,圆弧,直到最后SDO_ORDINATES=(6,10,10,1,14,10,10,14,6,10),直线,圆弧,2.3 geometry示例,点pointSDO_GTYPE=2001/点SDO_SRID=NULLSDO_POINT=MDSYS.SDO_POINT_TYPE(12,14,NULL)SDO_ETYPE=NULLSDO_ORDIN
23、ATES=NULL,(12,14),2.4 geometry元数据结构,geometry元数据内容每一维的名称、上下限和容差值存放在系统表中,用户不能直接访问,通过三个视图来存取:USER_SDO_GEOM_METADATA,可以更新ALL_SDO_GEOM_METADATA,只可以查询DBA_SDO_GEOM_METADATA,DBA可查询对于每一个几何类型字段都应该相应更新USER_SDO_GEOM_METADATA视图,2.4 geometry元数据结构,元数据结构TABLE_NAME varchar2(32)记录几何字段所在的表名COLUMN_NAME varchar2(32)记录几何
24、字段的名称DIMINFO MDSYS.SDO_DIM_ARRAY由最多4个SDO_DIM_ELEMENT组成,每个SDO_DIM_ELEMENT描述一个维度的信息SDO_DIMNAME:维度名称,如“x”SDO_LB,SDO_UB:上下限SDO_TOLERANCE:容差值SRID number记录字段的空间参照系ID,2.5 度量单位,涉及测量的空间函数都包括单位选项对于地理相关的geometry,其缺省坐标值单位由SRID决定,大多数坐标系的单位是米对于SRID为NULL的geometry,没有单位Spatial通过两个系统表来判定单位是否有效MDSYS.SDO_DIST_UNITSSDO_
25、UNIT:单位名称(km/mile/foot)UNIT_NAME:描述信息CONVERSION_FACTOR:和米的转换比MDSYS.SDO_AREA_UNITS结构同上,FACTOR是同平方米的转换比,2.5 度量单位,示例,SELECT c.name,SDO_GEOM.SDO_LENGTH(c.shape,m.diminfo,unit=KM)FROM cola_markets_cs c,user_sdo_geom_metadata mWHERE m.table_name=COLA_MARKETS_CS AND m.column_name=SHAPE;,3 索引和查询空间数据,创建空间索引查
26、询空间数据空间查询空间连接,3.1 创建空间索引,为了高效访问空间数据,必须创建索引在数据装入后,创建索引可以是R-tree索引和quadtree索引如果创建过程中中止必须用drop index删除创建R-tree索引如果create index语句没有指定quadtree的参数,则自动创建R-tree索引可以在2、3、4维几何类型字段上建立R-tree索引缺省是2维,3、4维需要通过sdo_index_dims参数来指定,3.1 创建空间索引,创建R-tree索引SQL语句create index country_idx on country(shape)indextype is MDSYS
27、.SPATIAL_INDEX;如果在字段上创建了多于2维的索引,部分空间关系和空间操作将被限制SDO_RELATE,SDO_NN,SDO_WITHIN_DISTANCE失效SDO_FILTER正常,3.1 创建空间索引,创建R-tree索引存储空间需求设需要索引的表有n条记录R-tree索引表本身需要占据70*n字节空间创建索引过程中需要200*n字节空间,随后释放超过1M条记录的大型表,还额外需要100*n字节的临时排序空间创建索引的参数(quadtree索引)SDO_LEVEL:固定尺寸分片索引的分片层次,Oracle Enterprise Manager中的Spatial Index A
28、dvisor可以用来确定创建索引需要的大约层次SDO_NUMTILES:动态尺寸分片索引对每个几何对象分片的数量,不建议使用动态分片,3.1 创建空间索引,创建索引的参数(quadtree索引)SDO_COMMIT_INTERVAL:索引创建过程是一个事务,为了减少支持事务回滚所需要的空间,可以设定参数在索引了几个几何对象之后即提交一次事务索引地理数据geodetic data为了充分利用Spatial的特性,对于包含参照系的地理数据应该使用R-tree来创建地理索引quadtree索引只能索引非地理数据非地理索引在空间操作中无法使用度量单位和一些选项,3.1 创建空间索引,约束几何对象的类型
29、可以在create index或者alter index rebuild语句中的layer_gtype参数限制创建索引的字段只能包含某类型的几何对象示例create index country_idx on country(shape)indextype is MDSYS.SPATIAL_INDEXPARAMETERS(layer_gtype=POLYGON),3.2 查询空间数据,主过滤Primary filter操作符SDO_FILTERSDO_FILTER只通过空间索引来判别两个几何对象是否相交不进行几何对象间的操作,只是空间分片进行相交判断得出的结果可能包含一些不相交的几何对象SDO_
30、FILTER(g1,g2,params)g1是一个geometry类型字段g2是一个geometry对象,判别是否和g1中的对象相交params是过滤参数,包括querytype,3.2 查询空间数据,SDO_FILTERquerytype=window将返回1,2,3,43,4不符合相交,3.2 查询空间数据,SDO_FILTER示例,3.2 查询空间数据,主次过滤复合运算符SDO_RELATE综合了主次过滤两阶段,能返回准确的结果SDO_RELATE(g1,g2,params)g1是一个geometry类型字段g2是一个geometry对象,判定与g1的空间关系params包含查询参数,包
31、括mask,querytypemask指定所要判别的空间关系,如TOUCHquerytype指定查询类型,window或者join,3.2 查询空间数据,SDO_RELATE示例,3.3 空间连接,空间连接查询将两个字段所包含的几何对象作笛卡尔积,两两进行关系判别空间连接对所用的空间索引要求一致或者都是R-tree索引或者都是quadtree索引,并且SDO_LEVEL也必须相同空间连接可以回答诸如:哪些高速公路穿越了哪些国家公园?这样的问题,3.3 空间连接,示例,主过滤可以通过空间索引返回近似的结果(超集),加上次过滤可以返回准确的结果,4 坐标系统,进展在Oracle9i之前,Spati
32、al仅支持平面直角坐标系的运算,对于地理数据未考虑球面的弯曲,计算将产生误差在Oracle9i中,对于地理坐标系考虑了椭圆面的曲度,地理数据的运算能够产生精确的结果,用户能够在任何坐标系下得到正确的查询结果性能采用了地理坐标系的空间查询花费的时间比在平面直角坐标系下的多一至二倍,4 坐标系统,限制在地理坐标系下,不能使用如下几何类型Circle,Circular arc,Optimized Rectangle可以使用SDO_GEOM.SDO_ARC_DENSIFY函数将arc转换成地理坐标下的多边形尺寸限制多边形不能够大过半个地球表面线不能长过半个大圆在地理坐标系下,不能计算几何对象的最小包围
33、盒,4 坐标系统,相关系统表MDSYS.CS_SRS以符合OpenGIS规范的形式保存系统中有效的空间参照系信息MDSYS.SDO_ANGLE_UNITS定义合法的角度单位MDSYS.SDO_DIST_UNITS定义合法的长度单位MDSYS.SDO_DATUMS定义合法的大地基准点信息MDSYS.SDO_ELLIPSOIDS定义椭球面MDSYS.SDO_PROJECTIONS定义合法的地图投影,4 坐标系统,关于地理坐标变换的函数SDO_CS.TRANSFORM:将几何对象转换为指定的坐标系sdo_cs.transform(geom,dim,to_srid|to_srname):geometr
34、ySDO_CS.TRANSFORM_LAYER:转换整个图层的坐标系sdo_cs.transform_layer(table_in,column_in,table_out,to_srid)SDO_CS.VIEWPORT_TRANSFORM:将一个查询窗口转换为地理多边形用于空间关系判定sdo_cs.viewport_transform(geom,to_srid):geometry,参考文献,Oracle Spatial Users Guide and Reference,Oracle,课程重点,GIS和空间数据管理发展阶段关系数据库关系数据模型关系代数SQL查询语言SELECT语句OpenGIS概念几何对象模型空间关系和9交叉模型Oracle Spatial概念,课程结束,谢谢,