Oracle

xiaoxiao2021-02-27  251

空间查询和分析组件提供查询和分析空间几何体的核心功能,包括几何引擎(Geometry Engine)和索引引擎(Index Engine) 。 几何引擎提供分析,比较操作几何体的函数。 索引引擎为了提高空间查询效率提供空间索引。索引引擎提供等价函数称之为操作符。 注意:几何体处理函数不使用空间索引,他们相对于空间操作符对空间数据要求更严格。

(1)、SDO_GEOM.SDO_DISTANCE  sdo_geom.sdo_distance直接计算两点间的距离,点的坐标用经纬度表示,如果不指定投影参数 那么

这个距离应该就是球面距离。 SDO_DISTANCE   (   geometry1       IN SDO_GEOMETRY,   geometry2       IN SDO_GEOMETRY,   tolerance       IN NUMBER  ) geometry1和geometry2是起始的两个参数,它们表示SDO_GEOMETRY对象。 tolerance表示数据集的容差。对于大地测量的数据,它们通常是0.5或者0.1(0.5米或者是0.1米)。  eg:查询离北京国贸饭店最近的五条道路

[sql]  view plain  copy select rname     from ( select r.pathname rname,                  SDO_GEOM.sdo_distance(r.geoloc, p.geoloc, 0.5) distance             from rbeijing r, pbeijing p            where p.name = '北京国贸饭店'            order by distance)    where rownum <= 5  

 

(2)、sdo_Geom.Relate sdo_Geom.Relate(sdo_Geometry1, ‘MASK’, sod_Geometry2, tolerance ):用于判断一个几何体与另 一个几何体的关系. 参数说明: sdo_Geometry1,sdo_Geometry2为空间数据对应的几何对象。 Tolerance: 容许的精度范围; MASK参数:      Anyinteract: sdo_Geometry2落在sdo_Geometry1面上包括在边上。      Contains: sdo_Geometry2完全包含在sdo_Geometry1几何对象中,并且两个几何对象的边没有交叉。      Coveredby: sdo_Geometry1完全包含在sdo_Geometry2中,并且这两个几何对象的边有一个或多个点相互重叠。      Covers: sdo_Geometry2完全包含在sdo_Geometry1中,并且这两个几何对象的边有一个或多个点相互重叠。      Disjoint: 两个几何没有重叠交叉点,也没有共同的边。      Equal: 两个几何是相等的。      Inside: sdo_Geometry1完全包含在sdo_Geometry2几何对象中,并且两个几何对象的边没有交叉。      On: sdo_Geometry1的边和内部的线完全在sdo_Geometry2上。      Overlapbdydisjoint: 两个几何对象交迭,但是边没有交叉。      Overlapbdyintersect: 两个几何对象交迭,并且边有部分交叉。      Touch: 两个几何对象有共同的边,但没有交叉。 eg:选择拱辰北大街上的所有POI点

[sql]  view plain  copy SELECT p.Poi_Id, p.name, p.address     FROM rbeijing r, pbeijing p   WHERE r.pathname = '拱辰北大街'      AND sdo_Geom.relate(r.geoloc,'ANYINTERACT',p.geoloc, 0.5)= 'ANYINTERACT'   (3)、sdo_Geom.SDO_BUFFER SDO_BUFFER    (   geometry            IN SDO_GEOMETRY,    distance            IN NUMBER,    tolerance       IN NUMBER   [, params       IN VARCHAR2]   )    RETURNS an SDO_GEOMETRY 其中 geometry是一个参数,表示将被缓冲的SDO_GEOMETRY对象。 distance是一个参数,表示缓冲输入的几何体的数值距离。 tolerance是一个参数,表示容差。 params是一个可选的第四个参数,表示两个参数:unit=<value_string>和arc_  tolerance=<value_number>。 unit=<value_string>参数表示距离的单位。你可以通过查阅MDSYS.SDO_DIST_UNITS表来获得单位的可能取值。 eg:对北京国贸饭店做一个25米的缓冲   [sql]  view plain  copy select p.kind, SDO_GEOM.SDO_BUFFER(p.geoloc, 25, 0.5, 'unit= M')        from pbeijing p       where p.name = '北京国贸饭店'   (4)、几何组合函数 A SDO_INTERSECTION B:返回A和B共有的区域。 A SDO_UNION B:返回A和B覆盖的区域的并。 A SDO_DIFFERENCE B:返回被A覆盖的但是不被B覆盖的区域。 A SDO_XOR B:返回A和B不相交的区域。 (5)、几何分析函数 Function_name  Geometry                                IN SDO_GEOMETRY,  tolerance                           IN NUMBER  [, units_params IN VARCHAR2]  RETURN  NUMBER 其中 Geometry表示将被分析的几何体。 Tolerance表示在这个分析中的容差。 units_params是可选的第三个参数,表示返回的面积、长度和体积的单位。这个参数的 形式 是'unit=<value_string>'。可以查看MDSYS.SDO_DIST_UNITS表的length函数和 MDSYS.SDO_AREA_UNITS表的面积函数获得这些单位的可能取值 SDO_AREA  此函数返回平面和立方体的面积。对于点和线,这个函数返回0。 [sql]  view plain  copy select SDO_geom.sdo_area(bp.geoloc, 0.5, 'unit= SQ_M')        from bpbeijing bp       where bp.name = '颐和园'   SDO_LENGTH  此函数返回一条线的长度和多边形、平面和立方体的周长。对于点,这个函数返回0。 [sql]  view plain  copy select sdo_geom.sdo_length(bp.geoloc, 0.1, 'unit=M')     from bpbeijing bp    where bp.name = '颐和园'   (6)、最小边界矩形 SDO_GEOM.SDO_MBR( geom IN SDO_GEOMETRY [, dim IN SDO_DIM_ARRAY] ) RETURN SDO_GEOMETRY; SDO_MBR函数把SDO_GEOMETRY作为一个参数并且计算这个几何体的MBR。它返回的是一个SDO_GEOMETRY对象。 如果输入的是一个点,那么SDO_MBR函数返回的是一个点几何体。 如果输入的是一条平行于X或Y轴的线串,那么函数返回一个线性几何体。 否则,函数返回输入几何体的MBR,将它作为一个SDO_GEOMETRY对象。 [sql]  view plain  copy SELECT SDO_GEOM.SDO_MBR(bp.geoloc, m.diminfo)      FROM bpbeijing bp, user_sdo_geom_metadata m     WHERE m.table_name = 'BPBEIJING'       AND m.column_name = 'GEOLOC'       AND bp.name = '颐和园';  
转载请注明原文地址: https://www.6miu.com/read-11007.html

最新回复(0)