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

时间:2013-06-25 08:56:20

标签: oracle spatial oracle-spatial

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

由于这是一种理论方法,而且我没有真正的数据 - 而且我不是母语人士,我完全不确定这个功能是否能够做到这一点。

2 个答案:

答案 0 :(得分: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 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';

答案 1 :(得分:0)

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