按多边形ID

时间:2015-06-21 09:41:51

标签: oracle group-by polygon spatial

我有一个table pline_sp,其中包含一个包含SDO_GEOMETRY个多边形的geom列。每个多边形都有一个类类型。我编写了一个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;

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

我希望得到它内部的多边形区域的总和,而不是所有的总和。

我希望结果如下:

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

...

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

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。 首先,SQL可以更具可读性,如果在S.labelselect中添加GROUP 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;