如何绘制对应点簇面积的多边形?

How to draw a polygon that corresponds to the area of a point cluster?

给定以下数据集,我正在尝试创建一个覆盖点簇最小面积的多边形:

CREATE TABLE public.points ( 
  cat integer,
  geom geometry (point, 4326)
);

INSERT INTO points VALUES 
  (1,'SRID=4326;POINT(-35.3971 -8.1366)'),
  (1,'SRID=4326;POINT(-35.388 -8.1366)'),
  (1,'SRID=4326;POINT(-35.3907 -8.1302)'),
  (1,'SRID=4326;POINT(-35.3925 -8.1366)'),
  (1,'SRID=4326;POINT(-35.3896 -8.1418)'),
  (2,'SRID=4326;POINT(-35.3996 -8.1418)'),
  (2,'SRID=4326;POINT(-35.4056 -8.1418)'),
  (2,'SRID=4326;POINT(-35.4056 -8.1542)');

我试过使用 ST_Envelope,但顾名思义,它在集群周围创建了一个包络,因此比我们需要的区域大得多。

SELECT ST_Envelope(geom) FROM (
  SELECT ST_Collect(geom) AS geom
  FROM points GROUP BY cat
) mypoints

如何缩小包络以创建一个或多或少仅覆盖点和 space 之间的多边形?

要创建这样的多边形,您必须使用 ST_ConvexHull or ST_ConcaveHull,例如

WITH j AS (
  SELECT ST_Collect(geom) AS geom
  FROM points GROUP BY cat
)
SELECT ST_ConvexHull(geom) FROM j 
UNION ALL SELECT geom FROM j;

注意UNION ALL SELECT geom FROM j所有点仅供说明。