【问题标题】:oracle spatial compute area of polgons inside a class of polygon group by polygon IDoracle空间计算多边形组内多边形ID的多边形区域
【发布时间】:2026-02-07 13:30:01
【问题描述】:

我有一个table pline_sp,它有一个包含SDO_GEOMETRY 多边形的几何列。每个多边形都有一个类类型。我编写了一个 SQL 查询来查找类 C1 并从类 C2 中找到位于类 C1 内的所有多边形,然后对所有的区域求和。

我不确定这是不是最好的方法,但查询如下:

select sum(SDO_GEOM.SDO_AREA(result.geom, 0.005, 'unit=SQ_KM'))  
from (SELECT a.geom
      FROM pline_sp a,
           (select A.Geom from pline_sp A where A.class='C1') B
      WHERE SDO_RELATE(A.Geom, B.Geom, 'mask=inside') = 'TRUE' 
        AND A.Class='C2') result;

表中有大约 7 个来自类 C1 的多边形,每个多边形都有不同的 label

我想得到其中由标签分隔的多边形区域的总和,而不是所有的总和。

我希望结果是这样的:

Label   Area
--------------
l324     321.54
l543     325.21

...

在 SQL 中是否有任何解决方案或者我应该编写程序? 谢谢。

【问题讨论】:

    标签: oracle group-by polygon spatial


    【解决方案1】:

    我找到了我的问题的答案。 首先,SQL 可能更具可读性,如下所示,并在最后添加 S.label selectGROUP BY S.label 一切都会好起来的:

     SELECT S.label,SUM(SDO_GEOM.SDO_AREA(M.geom,0.005,'unit=SQ_KM')) 
          from 
            (SELECT P.label,P.geom from pline_sp P WHERE P.class='class1') S,
             (SELECT P.geom from pline_sp P WHERE P.class='class2') M
             WHERE 
             SDO_RELATE(M.geom,S.geom,'mask=inside')='TRUE'
             GROUP BY S.label;
    

    【讨论】: