我正在尝试实现一个函数,该函数返回包含特定半径(距离)内多边形(描述区域)的表格的所有条目。我找到了函数SDO_GEOM.SDO_WITHIN_DISTANCE
并阅读了this post。
由于这是一种理论方法,而且我没有真正的数据 - 而且我不是母语人士,我完全不确定这个功能是否能够做到这一点。
答案 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
来执行您想要的操作 - 即根据行与原点形状的距离来限制行。