2015-06-21 137 views
0

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

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

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任何解决方案或我应该写程序? 谢谢。

回答

0

我找到了我的问题的答案。 首先,SQL可能如下,并通过在年底加入的一切在selectS.labelGROUP 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;