oracle中的operator,Oracle Spatial中的Operator操作子 详细说明

SDO_FILTER

格式:

SDO_FILTER(geometry1,

geometry2, params);

描述:

通过空间索引,根据给定的几何要素检索出具有空间相互关系的空间对象。这里的空间关系是指两个几何不分离,即Non-disjoint。【disjoint:表示两个几何的边和内部都不相交】

这个Sdo_Filter执行只是初始的空间过滤操作;二次的过滤操作将由SDO_RELATE操作子完成,它能确定空间对象的相交关系。

参数:

geometry1: 指需要查询表中几何列,该几何列务必已经建立空间索引。该列的数据类型为:MDSYS.SDO_GEOMETRY。

geometry2: 它值的可以是表中的几何,也可以是具体的几何对象(包括关联的几何对象变量、通过SDO_GEOMETRY构造函数的几何对象)。该列的数据类型也为:MDSYS.SDO_GEOMETRY。

params: 决定操作子的行为。数据类型为VARCHAR2。

该params具体有以下几种:

querytype:有效的查询类型有:WINDOW和JOIN.。这是个必须的参数。

querytype =’ WINDOW’建议大部分情况下是使用该参数的。WINDOW’表明查询将执行表中所有候选geometry1,与geometry2进行比较。也就是说WINDOW将单个geometry1和所有的geometry2进行空间关系操作,并比较是否满足空间关系。

querytype =’

JOIN’很少用到。当你想比较该geometry1几何列和另外geometry2表中的几何列的话可使用JOIN。使用JOIN表明该geometry2必须建立的几何索引(具体参考使用说明)。

idxtab1【可选】:如果存在多个空间索引表,它指的是geometry1空间索引表对应的表名。

idxtab2【可选】:如果存在多个空间索引表,它指的是geometry1空间索引表对应的表名。只有当querytype

=’ JOIN’才可以使用该参数。

返回值:

表达式SDO_FILTER(arg1, arg2, arg3) =

‘TRUE’中的True表明两个几何空间关系为:不相离;否则为False。

使用说明

这个SDO_FILTER操作子必须用在Where子句中,在sql语句中使用该格式:SDO_FILTER(arg1, arg2,arg3) =

‘TRUE’.。

如果querytype =’

WINDOW’。 geometry2可以来自一个表,也可以来自具体的几何对象(包括关联的几何对象变量、通过SDO_GEOMETRY构造函数的几何对象)。

1、如果2个或大于2的geometry2几何将在SDO_FILTER中使用的话,geometry2将在from语句的第一个参数。

如果querytype =’

JOIN’。

1、geometry2必须来自于表;

2、为了更好的执行SQL语句,geometry1和geometry2应该使用相同的空间索引类型(R树或者二叉树);如果是二叉树他们应该有相同的sdo_level值。geometry1和geometry2不是相同的索引类型,geometry2将按照geometry1索引类型重新构建索引,这样SQL语句的性能就大打折扣。

如果geometry1和geometry2是基于不同的坐标参考系统的话,为了

执行操作geometry2将被临时的转换为geometry1的坐标系统。

举例:

1、从Polygons表中选择出满足一定条件的GID。该条件为:选择出的GID对应的几何与query_polys表中GID=1的几何不相离。

SELECT A.gid

FROM Polygons A, query_polys

B

WHERE B.gid = 1

AND SDO_FILTER(A.Geometry,

B.Geometry, ’querytype = WINDOW’) = ’TRUE’;

///其中A.Geometry为Polygons表几何列的列名

2、也是从Polygons表中选择出满足一定条件的GID。不过查询几何被存储到aGeom变量中。

Select A.Gid

FROM Polygons A

WHERE SDO_FILTER(A.Geometry,

:aGeom, ’querytype=WINDOW’) = ’TRUE’;

3、也是从Polygons表中选择出满足一定条件的GID。查询几何为sdo_geometry构造函数构造的几何。

Select A.Gid

FROM Polygons A

WHERE SDO_FILTER(A.Geometry,

mdsys.sdo_geometry(2003,NULL,NULL,

mdsys.sdo_elem_info_array(1,1003,3),

mdsys.sdo_ordinate_array(x1,y1,x2,y2)),

’querytype=WINDOW’) =

’TRUE’;

4、从Polygons表中选择出满足一定条件的GID,当Polygons表的候选几何与任意一个query_polys的几何对象不相离都将GID选择出。因为多个query_polys中的几何将涉及到(参考使用说明)geometry2将被放到from的第一个参数。

SELECT

A.gid

FROM query_polys B, polygons

A

WHERE SDO_FILTER(A.Geometry,

B.Geometry, ’querytype = WINDOW’) = ’TRUE’;

5、从Polygons表中选择出满足一定条件的GID,当Polygons表的候选几何与任意一个query_polys的几何对象不相离都将GID选择出。在这个例子中QUERY_POLYS.GEOMETRY几何列务必建立了空间索引。

SELECT A.gid

FROM Polygons A, query_polys

B

WHERE

SDO_FILTER(A.Geometry,

B.Geometry, ’querytype = JOIN’) = ’TRUE’;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值