一、空间操作符的语法
(
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米以内的所有道路。
selectr.pathname
fromrbeijing r, pbeijing p
wherep.name=‘北京国贸饭店’
andSDO_WITHIN_DISTANCE(r.geoloc, p.geoloc,‘DISTANCE=100 unit=M’) =‘TRUE’
SDO_NN操作符 按其与查询位置的距离顺序来返回数据。一般通过ROWNUM
SDO_BATCH_SIZE参数:空间索引成批返回结果直到WHERE 子句中的所有谓词被满足。
eg:选择北京国贸饭店最近的5个超市
selectp1.name
frompbeijing p1, pbeijing p2
wherep2.name=‘北京国贸饭店’
andp1.namelike‘%超市’
andSDO_NN(p1.geoloc, p2.geoloc,‘SDO_BATCH_SIZE=100’) =‘TRUE’
andROWNUM
SDO_FILTER
SDO_FILTER(geometry1, geometry2, params);
querytype: 有效的查询类型有:WINDOW和JOIN.。这是个必须的参数。使用JOIN表明该geometry2必须建立的几何索引
表达式SDO_FILTER(arg1, arg2, arg3) =‘TRUE’中的True表明两个几何空间关系为:不相离;否则为False。
eg:选择拱辰北大街上的所有POI点
SELECTp.Poi_Id, p.name, p.address
FROMrbeijing r, pbeijing p
WHEREr.pathname =‘拱辰北大街’
ANDSDO_FILTER(p.geoloc, r.geoloc,‘querytype = WINDOW’) =‘TRUE’;
SDO_RELATESDO_RELATE(geometry1, geometry2, params);过空间索引,根据给定的几何要素(如一个多边形)检索出与其有特殊空间关系的几何要素。这个空间关系包括九种:Touch, OVERLAPBDYDisjoint, OVERLAPBDYIntersect, Equal,Inside, CoveredBy, Contains, Covers, AnyInteract, On。这个操作子相当于同时执行了第一步(SDO_FILTER的功能)和第二步过滤操作。eg:查询和颐和园任意相交的POI点
SELECTp.Poi_Id, p.name, p.address
FROMBPbeijing bp, pbeijing p
WHEREbp.name=‘颐和园’
ANDSDO_RELATE(p.geoloc, bp.geoloc,‘mask=ANYINTERACT querytype=WINDOW’) =‘TRUE’;
SDO_CONTAINS 包含eg:查询包含POI点西堤古桑所属的面
SELECTbp.name
FROMBPbeijing bp, pbeijing p
WHEREp.name=‘西堤古桑’
ANDSDO_CONTAINS (bp.geoloc,p.geoloc) =‘TRUE’;
SDO_EQUAL 相等
selectp.Poi_Id, p.name, p.address
frompbeijing p
whereSDO_EQUAL(p.geoloc,
mdsys.sdo_geometry( 2001 ,
8307 ,
SDO_POINT_TYPE( 116.26068278744 ,
39.9959723157894 ,
NULL),
NULL,
NULL)) =‘TRUE’
转载自:https://blog.csdn.net/alinshen/article/details/80007222