oracle 空间操作符,Oracle_spatial的空间操作符

论坛 期权论坛 脚本     
已经匿名di用户   2022-5-29 19:30   1171   0

一、空间操作符的语法

(

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP