postgresql - 从单个要素图层中选择相交面
问题描述
我有数百个多边形(圆圈),其中一些多边形彼此相交。该多边形来自单个要素图层。我想要做的是删除相交的圆圈。
它类似于这个问题:link,但那些使用两个不同的层。在我的情况下,交叉点来自单个要素图层。
解决方案
如果我正确理解了您的问题,您只需要创建一个CTE
或简单的子查询。
这可能会让您很好地了解如何解决您的问题:
CREATE TABLE t (id INTEGER, geom GEOMETRY);
INSERT INTO t VALUES
(1,'POLYGON((-4.54 54.30,-4.46 54.30,-4.46 54.29,-4.54 54.29,-4.54 54.30))'),
(2,'POLYGON((-4.66 54.16,-4.56 54.16,-4.56 54.14,-4.66 54.14,-4.66 54.16))'),
(3,'POLYGON((-4.60 54.19,-4.57 54.19,-4.57 54.15,-4.60 54.15,-4.60 54.19))'),
(4,'POLYGON((-4.40 54.40,-4.36 54.40,-4.36 54.38,-4.40 54.38,-4.40 54.40))');
该数据集共包含 4 个多边形,其中两个重叠,如下图所示:
应用带有子查询的 CTE 可能会给您想要的,即来自同一个表的非重叠多边形:
SELECT id, ST_AsText(geom) FROM t
WHERE id NOT IN (
WITH j AS (SELECT * FROM t)
SELECT j.id
FROM j
JOIN t ON t.id <> j.id
WHERE ST_Intersects(j.geom,t.geom)
);
id | st_astext
----+---------------------------------------------------------------------
1 | POLYGON((-4.54 54.3,-4.46 54.3,-4.46 54.29,-4.54 54.29,-4.54 54.3))
4 | POLYGON((-4.4 54.4,-4.36 54.4,-4.36 54.38,-4.4 54.38,-4.4 54.4))
(2 rows)
推荐阅读
- java - Spring Data JPA @Convert 抛出 Operations Not Allowed 异常
- pkg-config - pkg-config - 是否可以添加到编译器/链接器?
- google-apps-script - 在谷歌表格中提交表单后设置默认值
- nginx - 在 digitalocean 中查看 Flask 应用程序的错误日志记录
- css - SVG - 虽然我正在使用笔画属性,但笔画宽度不起作用
- sql-server - SSIS 中将文本转换为数字的数据正在删除字符
- git - 使用 Husky 和/或 Lint-Staged 检查 CI 服务器上的代码质量
- python - 以任何可能的方式使用八个嵌套的 for 循环加速例程
- mongodb - 如何将数据附加到 MERN 堆栈中 mongodb 中的现有数组
- javascript - 如何在画布上垂直居中对齐多行文本(在 NodeJS 中)