如何绘制对应点簇面积的多边形?
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
所有点仅供说明。
给定以下数据集,我正在尝试创建一个覆盖点簇最小面积的多边形:
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
所有点仅供说明。