sql - 如何绘制与点簇面积对应的多边形?
问题描述
鉴于以下数据集,我正在尝试创建一个覆盖点簇最小区域的多边形:
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
如何缩小信封以创建或多或少仅覆盖其间的点和空间的多边形?
解决方案
要创建这样的多边形,您必须使用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
所有点仅用于说明目的。
推荐阅读
- python - python中的增量(a * = b)
- java - 从 onResponse Android 返回一个值
- excel - 过渡到新月份期间excel vba中的日期增量
- arcore - 如何删除 ARCore 中的所有平面
- sqlite - sqlite3 fts4“错误数据库表被锁定”
- hyperledger-fabric - Composer 网络安装问题
- angular - 在渲染()循环内调用函数的角度运行时错误:'未定义不是对象(评估 this.watchLocation)'
- java - 在多个junit测试套件上添加拆卸方法
- gwt - 更新的 IE 和 Windows 10 的 GWT 2.2.0 问题
- c++ - Linux 上的 CMake enable_language(CUDA) 不会自动包含 CUDA 标头:如何解决?