1

我正在尝试实现一个函数,该函数返回包含特定半径(距离)内的多边形(描述区域)的表的所有条目。我找到了这个功能SDO_GEOM.SDO_WITHIN_DISTANCE并阅读了这篇文章

由于这是一种理论方法,我没有实际数据——而且我不是母语人士,我完全不确定这个函数是否能够做到这一点。

4

2 回答 2

2

首先,您需要使用 SDO_WITHIN_DISTANCE运算符,而不是 SDO_GEOM.WITHIN_DISTANCE函数。第一个将使用多边形表上的空间索引执行搜索。第二个不会(所以会很慢)。

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

假设您有一个表 AREAS (ID, GEOMETRY) 和一个表 LOCATIONS (ID, GEOMETRY),并且您想要查找点 42 10 公里内的所有区域:

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 公里的缓冲区,并将其用作搜索区域以查找匹配的多边形:

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';
于 2013-10-18T14:55:20.120 回答
0

可以SDO_GEOM.SDO_WITHIN_DISTANCEWHERE子句中使用来执行您想要的操作 - 即根据行与原始形状的距离来限制行。

于 2013-08-31T15:29:51.320 回答