首页 > 解决方案 > Oracle 按空间相交分组?

问题描述

我在 160 平方公里的区域内拥有大量工作场所(+/- 200 000),并且分布在大约 20 年的时间里。

我想为每个工作场所获得的是: 交叉工作场所的 ID
所有 空间交叉工作场所 的 Min_Start_Date 所有空间交叉工作场所的 Max_Start_Date


所以基本上我需要相当于“按交叉点分组”,有人知道如何解决这个问题吗?

工作场所 ID 整数
StartDate Date
EndDate Date

Workplaces_GIS:
ID 整数
SHAPE SDOgeometru

架构

标签: oraclegroup-byintersectoracle-spatial

解决方案


如果您使用的是 11g R2 或更高版本,则可以使用以下查询:

SELECT  a.ID,
        listagg(b.ID, ',') within group (order by b.ID) as Intersect_ids,
        min(b.StartDate) as Min_Start_Date,
        max(b.EndDate) as Max_Start_Date
    FROM workplaces a, workplaces b
        WHERE a.ID != b.ID
        AND sdo_relate(a.geom, b.geom, 'mask = anyinteract') = 'TRUE'
        GROUP BY a.ID;

推荐阅读