Oracle Spatial(定位器)-查找距离/半径内的多边形

Oracle Spatial(定位器)-查找距离/半径内的多边形,oracle,spatial,oracle-spatial,Oracle,Spatial,Oracle Spatial,我正在尝试实现一个函数,该函数返回表中包含特定半径(距离)内多边形(描述区域)的所有条目。我发现函数SDO\u GEOM.SDO\u在距离之内并读取 因为这是一种理论方法,我没有真实的数据,而且我不是一个母语为英语的人,我完全不确定这个函数是否能够做到这一点。可以在WHERE子句中使用SDO\u GEOM.SDO\u in_DISTANCE来执行您想要的操作,即根据行与原点形状的距离限制行。首先,您需要使用SDO\u in_DISTANCE操作符,不是SDO_GEOM.in_DISTANCE功能

我正在尝试实现一个函数,该函数返回表中包含特定半径(距离)内多边形(描述区域)的所有条目。我发现函数
SDO\u GEOM.SDO\u在距离之内
并读取


因为这是一种理论方法,我没有真实的数据,而且我不是一个母语为英语的人,我完全不确定这个函数是否能够做到这一点。

可以在
WHERE
子句中使用
SDO\u GEOM.SDO\u in_DISTANCE
来执行您想要的操作,即根据行与原点形状的距离限制行。

首先,您需要使用SDO\u in_DISTANCE操作符,不是SDO_GEOM.in_DISTANCE功能。第一个将使用多边形表上的空间索引执行搜索。第二个将不会(因此将非常缓慢)

然后,距离内的SDO_可能是您需要的,也可能不是您需要的,这取决于您定义“半径内”的方式。如果您的意思是多边形最近的边界必须在半径范围内,那么SDO_in_DISTANCE就是您所需要的

假设您有一个表格区域(ID,几何图形)和一个表格位置(ID,几何图形),并且您希望查找距离点42 10 km以内的所有区域:

select a.id
from areas a, locations l
where l.id=42
and sdo_within_distance (a.geometry, l.geometry, 'distance=10 unit=km') = 'TRUE';
另一方面,如果要查找半径范围内完全包含的多边形,则需要构建10 km的缓冲区,并将其用作搜索区域以查找匹配的多边形:

select a.id
from areas a, locations l
where l.id=42
and sdo_inside (
  a.geometry,
  sdo_geom.sdo_buffer ( 
    l.geometry,
    10,
    0.05,
    'unit=km'
  ) 
) = 'TRUE';