首页 > 解决方案 > 如何绘制与点簇面积对应的多边形?

问题描述

鉴于以下数据集,我正在尝试创建一个覆盖点簇最小区域的多边形:

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

如何缩小信封以创建或多或少仅覆盖其间的点和空间的多边形?

标签: sqlpostgresqlpostgisspatial

解决方案


要创建这样的多边形,您必须使用ST_ConvexHullor 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所有点仅用于说明目的。


推荐阅读