oracle通过多边形ID计算一类多边形组内多边形的面积



我有一个table pline_sp,它有一个包含SDO_GEOMETRY多边形的geom列。每个多边形都有一个类类型。我编写了一个SQL查询来查找类C1,并查找位于类C1内部的类C2中的所有多边形,然后求和所有多边形的面积。

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

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中有任何解决方案吗?或者我应该编写过程?谢谢

我找到了问题的答案。首先,SQL可以更可读,如下所示,通过在selectGROUP BY S.label中添加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;

最新更新