Oracle11g中SDO_RELATE的COVERS掩码搭配多边形与点使用问题
你对空间关系的逻辑理解符合OGC标准定义:当点完全处于多边形的内部或边界上时,多边形 COVERS 点、点 COVEREDBY 多边形都应该返回TRUE。你在Oracle 11g中遇到的返回FALSE的问题,是该版本Spatial组件的特有实现限制导致的:
- Oracle 11g的
SDO_RELATE算子对COVERS、COVEREDBY掩码的实现仅支持同维度几何对象的关系判断:点是0维、多边形是2维,维度不同时会直接返回FALSE,该限制直到Oracle 12c版本才被优化移除。 - 你元数据中配置的0.25容差不会影响本次测试的结果,测试点(1,1)和矩形的位置关系不存在容差范围内的偏差。
解决方案
你可以根据业务场景选择以下两种替代方案实现需求:
- 大数据量高性能场景
继续使用基于空间索引的SDO_RELATE算子,用CONTAINS+TOUCHES的组合掩码替代COVERS,效果完全等价:既可以匹配完全在多边形内部的点,也可以匹配落在多边形边界上的点,示例语法:
sdo_relate(多边形几何字段, 点几何字段, 'mask=CONTAINS+TOUCHES')
- 小数据量精确计算场景
使用PL/SQL层的SDO_GEOM.RELATE精确计算函数,该函数的空间关系判断严格遵循OGC标准,不受同维度限制,11g版本下也可以正确返回COVERS的结果,示例语法:
-- 第四个参数为计算容差,和你元数据配置的0.25保持一致即可 SDO_GEOM.RELATE(多边形几何字段, 'COVERS', 点几何字段, 0.25)
内容的提问来源于stack exchange,提问作者Hasan Tuncay
相关产品推荐
相关产品推荐

