加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Oracle_Spatial的几何处理函数

(2016-07-16 15:50:26)
标签:

oracle_spatial

oracle

分类: Oracle

空间查询和分析组件提供查询和分析空间几何体的核心功能,包括几何引擎(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米)。 


(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:从宗地地块中选出与某一点相交后的图形的关系

 SELECT *  

  FROM T土地利用现状_D地类图斑400W a  

WHERE sdo_Geom.relate(a.shape,'ANYINTERACT',sdo_geometry(

                                           2001,

                                            null,

                                            sdo_point_type( 56004.23, 40372.15, null),

                                            null,

                                             null

                                             ), 0.5)= 'ANYINTERACT' 

eg2:选择拱辰北大街上的所有POI点

  1. SELECT p.Poi_Id, p.namep.address  
  2.   FROM rbeijing r, pbeijing  
  3. WHERE r.pathname '拱辰北大街'  
  4.    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=和arc_ 
tolerance=。
unit=参数表示距离的单位。你可以通过查阅MDSYS.SDO_DIST_UNITS表来获得单位的可能取值。
(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不相交的区域。
eg:返回shape与点相交的图形对象
SELECT SDO_GEOM.SDO_INTERSECTION(a.shape, sdo_geometry(
                                           2001,
                                            null,
                                            sdo_point_type( 56004.23, 40372.15, null),
                                            null,
                                             null
                                             ), 0.5)  FROM zd_test a

(5)、几何分析函数
Function_name 

Geometry                                IN SDO_GEOMETRY, 
tolerance                           IN NUMBER 
[, units_params IN VARCHAR2] 

RETURN  NUMBER
其中
Geometry表示将被分析的几何体。
Tolerance表示在这个分析中的容差。
units_params是可选的第三个参数,表示返回的面积、长度和体积的单位。这个参数的 形式
是'unit='。可以查看MDSYS.SDO_DIST_UNITS表的length函数和 MDSYS.SDO_AREA_UNITS表的面积函数获得这些单位的可能取值
SDO_AREA  此函数返回平面和立方体的面积。对于点和线,这个函数返回0。
--计算shape与某一点相交的面积
select sdo_geom.sdo_area(SDO_GEOM.SDO_INTERSECTION(a.shape, sdo_geometry(
                                           2001,
                                            null,
                                            sdo_point_type( 56004.23, 40372.15, null),
                                            null,
                                             null
                                             ), 0.5),0.5)  from zd_test a
SDO_LENGTH  此函数返回一条线的长度和多边形、平面和立方体的周长。对于点,这个函数返回0。

(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对象。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有