计算与Postgis中其他多边形相交的多边形的总面积

时间:2016-03-13 01:55:41

标签: postgresql postgis

我想在Postgis中计算'a'多边形的总面积,它与其他'b'相交。

   SELECT DISTINCT a.fk_sites, 
   SUM(ST_Area(a.the_geom)/100) as area
   FROM parcelles a, sites b
   WHERE st_intersects(a.the_geom,b.the_geom)
   GROUP BY a.fk_sites

我需要做一个SELECT DISTINCT因为'a'多边形可能与几个'b'多边形相交,所以返回的'a'多边形会出现几次。

这很好,我只是有问题,并非所有区域都是正确计算的。一些接缝忽略了DISTINCT情况,因此计算区域反映了所有的SUM,甚至是重复的'a'记录(即使它们应该被消除)。 当我在没有SUM函数的情况下进行查询时,我得到了正确数量的'a'多边形,并且在添加它们的区域时,我获得了正确的值。

  SELECT DISTINCT a.fk_sites, 
   ST_Area(a.the_geom)/100 as area
   FROM parcelles a, sites b
   WHERE st_intersects(a.the_geom,b.the_geom)
   ORDER BY a.fk_sites

SELECT DISTINCT和SUM / GROUP BY的组合不正确吗?

1 个答案:

答案 0 :(得分:0)

这可能与您fk_sites列有关,因为查询本身应该没问题,尽管在DISTINCT值上执行double precision绝对不是一件好事。

您可以通过在子查询中识别a中的不同行,然后在主查询中识别sum()来解决此问题:

SELECT fk_sites, sum(ST_Area(the_geom)/100) AS area
FROM (
  SELECT a.fk_sites, a.the_geom
  FROM parcelles a
  JOIN sites b ON ST_Intersects(a.the_geom, b.the_geom)
) sub
GROUP BY fk_sites
ORDER BY fk_sites;