无法访问 Oracle Spatial Operators

Not able to access Oracle Spatial Operators

当我尝试使用 Oracle Spatial operators 时,它抛出

ORA-13226: interface not supported without a spatial index.

虽然使用 SDO_GEOM 程序,但它工作正常。 例如

select *
from test_sdo_geometry
where SDO_GEOM.WITHIN_DISTANCE(sdo, 25, SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(151.16567373275757, -33.9031022157086, null), null, null), 0.05, 'unit=M')='TRUE'
order by 1;

但是使用 Oracle 运算符会抛出上述错误。

  select *
from test_sdo_geometry
where SDO_WITHIN_DISTANCE(SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(151.16567373275757, -33.9031022157086, null), null, null), SDO_GEOMETRY(2001, 8307, SDO_POINT_TYPE(151.16567373275757, -33.9031022157086, null), null, null), 'distance=10 unit=M')='TRUE'
order by 1; 

根据 Oracle 11g Documentation,如果 table 没有空间索引或者查询的维数 window 与维数不匹配,则运算符将被禁用创建索引时指定。

因此,必须完成两个步骤才能使用 SDO_GEOM.WITHIN_DISTANCE:

1/ 您必须更新名为 USER_SDO_GEOM_METADATA 的元数据视图。这是创建空间索引之前所必需的。可以在 Spatial Data Types and Metadata 页面上找到示例。

2/ 您必须按照 SQL 空间数据索引声明页面上提供的说明为 "SDO" 字段创建空间索引:

CREATE INDEX TEST_SDO_GEOMETRY_IDX ON TEST_SDO_GEOMETRY (SDO)
INDEXTYPE IS MDSYS.SPATIAL_INDEX;