Select 与单个要素层的多边形相交
Select Intersect Polygon From Single Feature Layer
我有数百个多边形(圆形),其中一些多边形彼此相交。该多边形来自单个要素层。我想做的是删除相交的圆圈。
类似于这个问题: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 与子查询一起应用可能会给您想要的结果,即来自相同 table:
的非重叠多边形
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)
你可以使用EXISTS子句写出非常清晰的删除语句。您确实想要删除行,其中存在几何相交的其他行:
DELETE
FROM myTable t1
WHERE EXISTS (SELECT 1 FROM myTable t2 WHERE t2.id <> t1.id AND ST_Intersects(t1.geom, t2.geom))
我有数百个多边形(圆形),其中一些多边形彼此相交。该多边形来自单个要素层。我想做的是删除相交的圆圈。
类似于这个问题: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 与子查询一起应用可能会给您想要的结果,即来自相同 table:
的非重叠多边形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)
你可以使用EXISTS子句写出非常清晰的删除语句。您确实想要删除行,其中存在几何相交的其他行:
DELETE
FROM myTable t1
WHERE EXISTS (SELECT 1 FROM myTable t2 WHERE t2.id <> t1.id AND ST_Intersects(t1.geom, t2.geom))