【问题标题】:Oracle Spatial (Locator) - Find Polygons within a distance / radiusOracle Spatial (Locator) - 查找距离/半径内的多边形
【发布时间】:2017-08-21 09:31:34
【问题描述】:

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

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

【问题讨论】:

    标签: oracle spatial oracle-spatial


    【解决方案1】:

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

    然后 SDO_WITHIN_DISTANCE 可能是也可能不是您需要的,这取决于您定义“在半径内”的方式。如果您的意思是多边形的最近 border 必须在半径内,那么 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';
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2015-09-18
        • 1970-01-01
        • 2020-06-17
        • 2016-08-26
        • 2021-07-20
        相关资源
        最近更新 更多