空间数据库课件:SDB(第七章).pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《空间数据库课件:SDB(第七章).pptx》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 空间 数据库 课件 SDB 第七
- 资源描述:
-
1、第七章第七章 Oracle Spatial的几何处理函数的几何处理函数基本要求:基本要求:1.了解空间函数2.使用空间函数对SDO_GEOMETRY对象进行复杂的分析在第六章,我们讨论了如何使用空间索引和相关空间操作符进行邻近分析(proximity analysis)。本章,我们描述几何处理函数,也叫做空间函数(只要是无歧义)来实现这个功能。与空间操作符相比,这些几何处理函数具有如下特点:l 不需要空间索引,l 与带空间索引的空间操作符相比,提供更详细的分析,l 可出现在SQL语句中的select列表中(以及带where子句的select列表中)7.1 缓冲函数缓冲函数 缓冲函数(SDO_B
2、UFFER):在一个特定的几何体或几何体集合周围创建一个缓冲。 图7-1 展示了为不同类型的几何体构建缓冲的例子,附带显示了缓冲之前的的几何体,这里只展示了简单的几何体。图7-1 一些简单类型的几何体对象和缓冲几何体 SDO_BUFFER函数有如下的语法:SDO_BUFFER(geometry IN SDO_GEOMETRY,distance IN NUMBER,tolerance IN NUMBER, params IN VARCHAR2)返回一个SDO_GEOMETRY,满足以下条件:Geometry,表示被缓冲的SDO_GEOMETRY对象。Distance,表示缓冲输入的几何体的数值距
3、离。Tolerance,表示容差。Params,是一个可选的的第四个参数,表示两个参数unit=和arc_tolerance=。 使用SDO_BUFFER函数,可以在branches表中的每一个分支机构位置周围构建一个1/4英里的缓冲,如程序清单7-1所示。我们在sales_regions表中存储这些缓冲以便于接下来的分析。SQLCREATE TABLE sales_regions AS SELECT id,SDO_GEOM.SDO_BUFFER(b.location, 0.25, 0.5, arc_tolerance=0.005 unit=mile) geomFROM branches b程
4、序清单程序清单7-1 在分支机构周围创建缓冲在分支机构周围创建缓冲同样可以创建竞争对手商店周围的缓冲 程序清单程序清单7-2 在竞争对手位置周围创建缓冲在竞争对手位置周围创建缓冲SQLCREATE TABLE competitors_sales_regions AS SELECT id,SDO_GEOM.SDO_BUFFER(cmp.location, 0.25, 0.5, arc_tolerance=0.005 unit=mile) geomFROM competitors cmp注意,你需要为两个表都创建空间索引。关于如何创建元数据和空间索引的详细细节,你可以查阅第6章。脚本如下:Sale
5、s_regions表的命令行元数据SQL INSERT INTO user_sdo_geom_metadataSELECT SALES_REGIONS,GEOM, diminfo, srid FROM user_sdo_geom_metadataWHERE table_name=BRANCHES;Competitors_sales_regions表的命令行元数据SQL INSERT INTO user_sdo_geom_metadataSELECT COMPETITORS_SALES_REGIONS,GEOM, diminfo, srid FROM user_sdo_geom_metadata
6、WHERE table_name=COMPETITORS;Sales_regions表的命令行索引创建SQL CREATE INDEX sr_sidx ON sales_regions(geom)INDEXTYPE IS mdsys.spatial_index;Competitors_sales_regions表的命令行索引创建SQL CREATE INDEX cr_sidx ON competitors_sales_regions(geom)INDEXTYPE IS mdsys.spatial_index;7.2 关系分析函数关系分析函数本节我们将介绍用于分析两个SDO_GEOMETRY对象
7、关系的两个函数。第一个函数是SDO_DISTANCE。这个函数用于确定两个几何体之间的距离的长度。第二个函数是RELATE。这个函数用于确定两个几何体是否以任一指定形式相交。 7.2.1 SOD_DISTANCE7.2.1 SOD_DISTANCESDO_DISTANCE函数有以下的语法:SDO_DISTANCE(geometry1 IN SDO_GEOMETRY,geometry2 IN SDO_GEOMETRY,tolerance IN NUMBER, params IN VARCHAR2)返回几何体1和几何体2之间以指定单位测量的最小距离。 满足以下条件: geometry1和geome
8、try2是起始的两个参数,它们表示SDO_GEOMETRY对象。 tolerance表示数据集的容差。对于大地测量的数据,它们通常是0.5或者0.1(0.5米或者是0.1米)。对于非大地测量的数据,它将被设置为合适的值,来避免四舍五入引起的错误(详情请见第八章)。 params是可选的第四个参数,是形如unit= 的字符串。这个参数说明了返回距离的单位。你可以通过查看MDSYS.SDO_DIST_UNITS表获得可能的单位值。使用这个函数,你可以确定在竞争对手位置周围四分之一英里半径范围内的客户,如程序清单7-3所示:程序清单程序清单7-3. 确定在竞争对手位置周围四分之一英里半径范围内的客户
9、确定在竞争对手位置周围四分之一英里半径范围内的客户SQLSELECT ct.id, ct.nameFROM competitors comp, customers ctWHERE comp.id=1 AND SDO_GEOM.SDO_DISTANCE(comp.location, ct.location, 0.5 unit=mile)SELECT ct.id, ct.name,SDO_GEOM.SDO_DISTANCE(ct.location, comp.location, 0.5, unit=yard) distanceFROM competitors comp, customers ctW
10、HERE comp.id=1AND SDO_WITHIN_DISTANCE(ct.location, comp.location, distance=0.25 unit=mile)=TRUEORDER BY ct.id;ID NAME DISTANCE- - -25 BLAKE CONSTRUCTION 319.03852628 COLONIAL PARKING 398.262506(此处省略20行)8792 DESTINATION HOTEL & RESORTS 159.23484323 rows selected.也可以在三维的物体上使用SDO_DISTANCE函数。程序清单7-5所示的S
11、QL用于确定一个直升机轨线和最近的建筑物之间的距离,这是一个三维距离。程序清单程序清单7-5. 使用使用SDO_DISTANCE函数函数确定最近建筑物确定最近建筑物和直升和直升机轨线之间的距离机轨线之间的距离 SQLSELECT cbldg.id,SDO_GEOM.SDO_DISTANCE(cbldg.geom, tr.trajectory, 0.05, UNIT=foot) distFROM trip_route tr, city_buildings cbldgWHERE cbldg.id=16;运行结果如下表所示,可以看出最近建筑物距离直升机轨线的距离是187.258607英尺ID DIS
12、T- -16 187.2586077.2.2 RELATE 7.2.2 RELATE 在程序清单7-2中,我们创建了分支机构和竞争对手位置周围的缓冲,用这些缓冲来干什么呢?我们可以进行关系分析,确定在这些销售区域和竞争对手区域内的客户。可以使用第六章讲述的SDO_RELATE操作符或者SDO_GEOM包中的RELATE函数做到这一点。RELATE函数的语法如右表所示:RELATE(Geometry_A IN SDO_GEOMETRY,mask, IN VARCHAR2,Geometry_Q, IN SDO_GEOMETRY,Tolerance IN NUMBER)满足下列条件:Geometry
13、_A和Geometry_Q代表两个几何体。mask可取如下的几种值: DETERMINE,确定Geometry_A和Geometry_Q之间的关系或者相互作用 任何一个关系,包括:INSIDE(在内部), COVEREDBY(被覆盖),COVERS(覆盖), CONTAINS(包含), EQUAL(等价), OVERLAPBDY- DISJOINT, OVERLAPBDYINTERSECT, ON(在上), and TOUCH(接触) ANYINTERACT 如果先前的任何一个关系存在 DISJOINT 如果先前的关系不存在RELATE函数的返回值如下: 如果几何体相交并且指定了ANYINTE
14、RACT mask,返回TRUE 如果Geometry_A和Geometry_Q满足指定的mask类型关系,返回mask值 如果几何体之间的关系不符合第二个参数 mask指定的关系,返回FALSE 如果mask被设置为DETERMINE,返回关系的类型使用RELATE函数,可以确认在竞争对手周围的缓冲区域(competitors_sales_regions)中的所有客户,如程序清单7-9所示。SQLSELECT ct.id, ct.nameFROM customers ct, competitors_sales_regions compWHERE SDO_GEOM.RELATE(ct.loca
15、tion, INSIDE, comp.geom, 0.5)= INSIDEAND comp.id=1ORDER BY ct.id;程序清单程序清单7-9 确认竞争对手销售区域里的客户确认竞争对手销售区域里的客户运行结果如下:ID NAME- -25 BLAKE CONSTRUCTION28 COLONIAL PARKING34 HEWLETT-PACKARD DC GOV AFFAIRS8792 DESTINATION HOTEL & RESORTS23 rows selected.对于三维的几何体,可以指定ANYINTERACT作为RELATE函数的第二个参数。在程序清单7-11的SQL语句
16、中,你可以通过SDO_GEOM.RELATE函数得知那些建筑与直升机轨线相交。程序清单程序清单7-11 确定与直升机轨线相交的建筑确定与直升机轨线相交的建筑SQLSELECT cbldg.idFROM city_buildings cbldg, trip_route trWHERE SDO_GEOM.RELATE(cbldg.geom, ANYINTERACT, tr.trajectory, 0.5)= TRUE;运行结果:ID-14注意注意:对于三维的几何体,RELATE函数 的 第 二 个 参 数 只 能 指 定 为ANYINTERACT。如果指定了其他任何参数,它将返回“没有符合条件的元
17、组”(在将来的版本中这一点可能会改变)。什么时候使用RELATE函数?使用SDO_GEOM.RELATE函数可以与第六章我们学到的SDO_RELATE操作符达到相同的分析效果。并且SDO_RELATE操作符使用了空间索引,所以执行的更快一些,而SDO_GEOM.RELATE函数没有使用任何索引,计算了customers表中的每一个元组。这可能导致非常慢的计算。因此如果SDO_RELATE操作符能达到同样的目的,那么RELATE函数是不会被使 用 的 。 然 而 , 在 一 定 的 场 景 下 可 以 使 用SDO_GEOM.RELATE函数例如,操作一个没有加索引的表或者几何体的子集,如程序清
18、单7-13的供应商表。注意供应商表是没有空间索引的。程序清单程序清单7-13. 在竞争对手周围四分之一范围内确定供应商在竞争对手周围四分之一范围内确定供应商SQLSELECT s.idFROM suppliers s, competitors_sales_regions csWHERE SDO_GEOM.RELATE(s.location, ANYINTERACT, cs.geom, 0.5)= TRUEAND cs.id=1;SQLSELECT ct.id, ct.name,SDO_GEOM.RELATE(ct.location, DETERMINE, comp.geom, 0.5) rel
19、ationshipFROM customers ct, competitors_sales_regions compWHERE comp.id=1AND SDO_RELATE(ct.loacation, comp.geom, mask=anyinteract)= TRUE;运行结果:ID NAME RELATIONSHIP- - -25 BLAKE CONSTRUCTION INSIDE7821 RENAISSANCE MAYFLOWER HOTEL INSIDE8138 ST GREGORY HOTEL INSIDE8382 EXXON INSIDE7789 SEVEN BUILDINGS
20、INSIDE23 rows selected.也可以使用SDO_GEOM.RELATESDO_GEOM.RELATE函数来补足SDO_RELATE操作符。例如可以使用带有ANYINTERACT参数的SDO_RELATE来确定一个候选的元组集合。然后使用SDO_GEOM.RELATE函数来确定返回的每一个元组的关系,如程序清单7-14所示。程序清单程序清单7-14.在竞争对手周围四分之一范围内确定客户在竞争对手周围四分之一范围内确定客户另一个商务应用的例子是识别彼此相交的销售区域。我们可以使用SDO_RELATE操作符来识别相交的销售区域对,然后执行SDO_GEOM.RELATE来判断它们之间是
21、否正好接触或者重叠。用于查找与id号为51的销售区域相交的所有销售区域的SQL语句如程序清单7-15所示。程序清单程序清单7-15. RELATE函数补充函数补充SDO_RELATE操作符操作符SQLSELECT sra.id,SDO_GEOM.RELATE(sra.geom, DETERMINE, srb.geom, 0.5) relationshipFROM sales_regions srb, sales_regions sraWHERE srb.id=51 AND sra.id51 AND SDO_RELATE(sra.geom, srb.geom,mask=TOUCH+OVERLAP
22、BDYDISJIONT+OVERLAPBDYINTERSECT)=TRUEORDER BY sra.id;运行结果:ID RELATIONSHIP- -43 OVERLAPBDYINTERSECT75 OVERLAPBDYINTERSECT76 TOUCH9 rows selected.7.3 几何组合函数几何组合函数A SDO_INTERSECTION B:返回A和B共有的区域A SDO_UNION B:返回A和B的区域A SDO_DIFFERENCE B:返回被A覆盖的但是不被B覆盖的区域。A SDO_XOR B:返回A和不相交的区域。 每一组几何组合函数的语义如图7-4所示:图7-4.
23、用于八边形几何体A和B的几何组合函数的语义。阴影区域是每个指定函数的结果。每一个函数都有如下的语法:返回SDO_GEOMETRY,满足以下条件:Geometry_A 和Geometry_是SDO_GEOMETRY对象(拥有相同的SRIDs)Tolerance是几何对象的容差值该函数返回一个SDO_GEOMETRY,它是在Geometry_A上针对Geometry_进行了合适的几何体组合函数计算所得的结果。 SDO_(Geometry_A IN SDO_GEOMETRY,Geometry_B IN SDO_GEOMETRY,Tolerance IN NUMBER)程序清单程序清单7-16 7-1
24、6 两个几何体的两个几何体的SDO_INTERSECTIONSDO_INTERSECTION操作操作程序清单程序清单7-17 7-17 与与idid号为号为5151的销售区域相交的销售区域的销售区域相交的销售区域SQL CREATE TABLE sales_intersection_zones ASSELECT sra.id id1, srb.id id2,SDO_GEOM.SDO_INTERSECTION(a.geom, b.geom, 0.5) intsxn_geomFROM sales_regions srb, sales_regions sraWHERE sra.id srb.idAN
25、D SDO_RELATE(sra.geom, srb.geom, mask=anyinteract )=TRUE ;SQL SELECT id2 FROM sales_intersection_zones WHERE id1=51;ID2-4350546366697275769 rows selected. 你可以将存储在sales_intersection_zones表中的intersection geometry (intsxn_geom列)用于对销售区域接下来的分析中。对Id号为51和43的销售区域,程序清单7-18展示了如何使用上述的几何体来确认在它们相交区域内的客户。这个SQL语句的
展开阅读全文