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



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

   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 情况,以便计算面积反映所有记录的总和,甚至是重复的"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

选择非重复和总和/分组依据的组合不正确吗?

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

您可以通过在子查询中标识与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;

最新更新