我有数百个多边形(圆),其中一些多边形彼此相交。此多边形来自单个要素层。我要做的是删除相交的圆。
这与这个问题类似: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个多边形,其中两个多边形重叠,如下图所示:
postgresql - 从单个要素图层中选择相交多边形-LMLPHP
使用子查询应用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)

postgresql - 从单个要素图层中选择相交多边形-LMLPHP

关于postgresql - 从单个要素图层中选择相交多边形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58284231/

10-15 18:11