Oracle Spatial中简单多边形重叠的语法

时间:2015-11-09 17:17:41

标签: oracle-spatial

我有一种情况需要检查表中的任何多边形是否占据oracle空间中给定多边形的任何相同空间。目前我正在运行SQL,如下所示:

SELECT * FROM MY_TABLE WHERE SDO_RELATE(MY_TABLE.GEOM, ?, 'mask=OVERLAPBDYINTERSECT+EQUAL+INSIDE+COVEREDBY+CONTAINS+COVERS') = 'TRUE'

在很多情况下这是非常慢的,在Oracle文档中,他们建议将其分解为性能(http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_operat.htm#i78531),使其更长一些(我个人会因为语法疯狂而受到性能影响) ):

SELECT * FROM MY_TABLE WHERE SDO_RELATE(MY_TABLE.GEOM, ?, 'mask=OVERLAPBDYINTERSECT') = 'TRUE'
UNION ALL
SELECT * FROM MY_TABLE WHERE SDO_RELATE(MY_TABLE.GEOM, ?, 'mask=EQUAL') = 'TRUE'
UNION ALL
SELECT * FROM MY_TABLE WHERE SDO_RELATE(MY_TABLE.GEOM, ?, 'mask=INSIDE+COVEREDBY') = 'TRUE'
UNION ALL
SELECT * FROM MY_TABLE WHERE SDO_RELATE(MY_TABLE.GEOM, ?, 'mask=CONTAINS+COVERS') = 'TRUE';

有更好的方法吗?对于理论上应该是一个非常常见的操作来说似乎是一个很长的语法! (并且我怀疑如果它存在,使用这样的函数也会提高性能。)我尝试使用SDO_OVERLAPS函数,但它没有捕获多边形相等或一个完全位于另一个内部的情况。

由于

0 个答案:

没有答案