Oracle_spatial的空间操作符

一、空间操作符的语法 
<spatial_operator> 

  table_geometry      IN SDO_GEOMETRY (或者 ST_GEOMETRY), 
  query_geometry      IN SDO_GEOMETRY (或者 ST_GEOMETRY), 
  [, parameter_string IN VARCHAR2 
     [, tag           IN NUMBER ]] 

= ‘TRUE’ 
table_geometry: 空间操作符要运用到的表几何体数据列;
query_geometry: 查询位置,可以是另一个表的几何体数据列,也可以是一个绑定的变量,或者是一个动态创建的几何体对象;
parameter_string: 指定特定的空间操作符参数,有些操作符中是可选的;
tag:在某些特定空间操作符上需要的数值,相关参数只能在parameter_string参数中指定。

 

二、空间操作符分类 
按邻近分析的类型可分为: 
1. 位置查询:从指定查询位置找出所有特定距离内的所有数据,即within distance操作符(SDO_WITHIN_DISTANCE); 
2. 邻近查询:找出指定查询位置附近最近的那些邻居,即最近邻居(nearest-neighbor)操作符(SDO_NN); 
3. 相交查询:找出与指定查询位置相交的所有邻居(Find neighbors that interact with or relate to a query location):主

要操作符是SDO_RELATE,更简单的有SDO_FILTER(只是MBR的计算,因此也不需要Geometry Engine操作),此类操作符主要用于区域

分析。此外还有对SDO_RELATE的简化版,如SDO_ANYINTERACT, SDO_CONTAINS, SDO_COVERS, SDO_COVEREDBY, SDO_EQUAL,

SDO_INSIDE, SDO_ON, SDO_OVERLAPS, 和SDO_TOUCH

SDO_WITHIN_DISTANCE 用于判断几何体sdo_Geometry2在指定的距离Distance内周边附近有什么其他几何体集。
eg:选择北京国贸饭店 100米以内的所有道路。

[sql] view plain copy

  1. select r.pathname  
  2.    from rbeijing r, pbeijing p  
  3.   where p.name = ‘北京国贸饭店’  
  4.     and SDO_WITHIN_DISTANCE(r.geoloc, p.geoloc, ‘DISTANCE=100 unit=M’) = ‘TRUE’  

 

SDO_NN操作符  按其与查询位置的距离顺序来返回数据。一般通过ROWNUM<N 来约束邻近数量
SDO_BATCH_SIZE参数:空间索引成批返回结果直到WHERE   子句中的所有谓词被满足。
eg:选择北京国贸饭店最近的5个超市

[sql] view plain copy

  1. select p1.name  
  2.   from pbeijing p1, pbeijing p2  
  3. where p2.name = ‘北京国贸饭店’  
  4.    and p1.name like ‘%超市’  
  5.    and SDO_NN(p1.geoloc, p2.geoloc, ‘SDO_BATCH_SIZE=100’) = ‘TRUE’  
  6.    and ROWNUM < 5  


SDO_FILTER
SDO_FILTER(geometry1, geometry2, params);
querytype: 有效的查询类型有:WINDOW和JOIN.。这是个必须的参数。使用JOIN表明该geometry2必须建立的几何索引
表达式SDO_FILTER(arg1, arg2, arg3) =‘TRUE’中的True表明两个几何空间关系为:不相离;否则为False。
eg:选择拱辰北大街上的所有POI点

[sql] view plain copy

  1. SELECT p.Poi_Id, p.name, p.address  
  2.   FROM rbeijing r, pbeijing p  
  3.   WHERE r.pathname = ‘拱辰北大街’  
  4.    AND SDO_FILTER(p.geoloc, r.geoloc, ‘querytype = WINDOW’ ) = ‘TRUE’ ;  


SDO_RELATE
 SDO_RELATE(geometry1, geometry2, params); 
过空间索引,根据给定的几何要素(如一个多边形)检索出与其有特殊空间关系的几何要素。这个空间关系包括九种:Touch, OVERLAPBDYDisjoint, OVERLAPBDYIntersect, Equal,Inside, CoveredBy, Contains, Covers, AnyInteract, On。这个操作子相当于同时执行了第一步(SDO_FILTER的功能)和第二步过滤操作。
eg:查询和颐和园任意相交的POI点

[sql] view plain copy

  1. SELECT p.Poi_Id, p.name, p.address  
  2.   FROM BPbeijing bp, pbeijing p  
  3.   WHERE bp.name‘颐和园’     
  4.    AND SDO_RELATE(p.geoloc, bp.geoloc, ‘mask=ANYINTERACT  querytype=WINDOW’) = ‘TRUE’;  


SDO_CONTAINS  包含
eg:查询包含POI点西堤古桑所属的面

[sql] view plain copy

  1. SELECT bp.name  
  2.   FROM BPbeijing bp, pbeijing p  
  3.   WHERE p.name‘西堤古桑’     
  4.    AND SDO_CONTAINS (bp.geoloc,p.geoloc) = ‘TRUE’ ;  


SDO_EQUAL  相等

[sql] view plain copy

  1. select p.Poi_Id, p.name, p.address  
  2.     from pbeijing p  
  3.    where SDO_EQUAL(p.geoloc,  
  4.                    mdsys.sdo_geometry( 2001 ,  
  5.                                       8307 ,  
  6.                                       SDO_POINT_TYPE( 116.26068278744 ,  
  7.                                                      39.9959723157894 ,  
  8.                                                      NULL ),  
  9.                                       NULL ,  
  10.                                       NULL )) = ‘TRUE’  

转载自:https://blog.csdn.net/alinshen/article/details/80007222

You may also like...