来自 Oracle SDO_GEOM.RELATE 的模棱两可的回答

Ambigous answer from Oracle SDO_GEOM.RELATE

我在使用 SDO_GEOM.RELATE Oracle Spatial 函数时遇到了一些问题。我正在使用 Oracle 11.2.0.3 和 SRIM 8307。

我有折线和点并将它们与以下查询相关联我有一些奇怪的答案:

select SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'CONTAINS', pk_spatial.get_geo_point(43856030232), 20) CONTAINS, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'COVEREDBY', pk_spatial.get_geo_point(43856030232), 20) COVEREDBY, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'COVERS', pk_spatial.get_geo_point(43856030232), 20) COVERS, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'DISJOINT', pk_spatial.get_geo_point(43856030232), 20) DISJOINT, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'EQUAL', pk_spatial.get_geo_point(43856030232), 20) EQUAL, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'INSIDE', pk_spatial.get_geo_point(43856030232), 20) INSIDE, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'ON', pk_spatial.get_geo_point(43856030232), 20) ON_, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'OVERLAPBDYDISJOINT', pk_spatial.get_geo_point(43856030232), 20) OVERLAPBDYDISJOINT, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'OVERLAPBDYINTERSECT', pk_spatial.get_geo_point(43856030232), 20) OVERLAPBDYINTERSECT, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'TOUCH', pk_spatial.get_geo_point(43856030232), 20) TOUCH, SDO_GEOM.RELATE((select georoute from t_georoute where id_georoute = 2196), 'determine', pk_spatial.get_geo_point(43856030232), 20) what from dual;

"CONTAINS","COVEREDBY","COVERS","DISJOINT","EQUAL","INSIDE","ON_","OVERLAPBDYDISJOINT","OVERLAPBDYINTERSECT","TOUCH","WHAT" "CONTAINS","FALSE","FALSE","DISJOINT","FALSE","FALSE","FALSE","FALSE","FALSE","FALSE","DISJOINT"

从查询来看,几何图形似乎是不相交的,但第一个包含第二个... 他们实际上很不高兴,但如果我要求任何相关信息,我说的是真的,那是错误的。

这看起来像是一个错误,但也许我做错了什么。

提前致谢, 塞缪尔

我发现 SDO_GEMOETRY 有一些多余的点。 在我删除它们之后,RELATE 函数按预期工作。 函数 SDO_UTIL.REMOVE_DUPLICATE_VERTICES 成功了。

希望这对以后的人有所帮助。

塞缪尔