从较大的几何体中排除基于缓冲区的几何体

Exclude the geometry based on buffer from the bigger geometry

我有一个多边形几何体,其中多边形几何体是分散的。我想排除不属于大几何的几何。例如下图是其中一个多边形太远的区域。我想根据缓冲区排除该多边形。可以使用什么功能来做到这一点?

您必须 ST_Dump MultiPolygon 并迭代结果集以过滤掉不与给定几何相交的多边形,例如

SELECT * FROM (SELECT (ST_Dump(geom)).* FROM mytable) t
WHERE ST_Contains('YOUR BUFFER GOES HERE',t.geom);

演示:db<>fiddle

CREATE TABLE t (gid int, geom geometry(multipolygon,4326));
INSERT INTO t VALUES (1,'SRID=4326;MULTIPOLYGON(((30 20,45 40,10 40,30 20)),((15 5,40 10,10 20,5 10,15 5)),((-24.78 25.47,-19.14 22.38,-26.35 19.86,-24.78 25.47)))'::geometry);

  • 两个最大的多边形周围的大 BBOX 描绘了您的缓冲区,而不是 MultiPolygon 的一部分。我把它放在图片中只是为了说明目的。

以下查询转储 MultiPolygon,检查每个 Polygon 是否与给定的 polygon/buffer 相交并创建一个新的 MultiPolygonPolygon,如果只剩下一个几何图形:

SELECT gid, ST_AsText(ST_Union(geom)) 
FROM (SELECT gid,(ST_Dump(geom)).* FROM t) j
WHERE ST_Contains('SRID=4326;POLYGON((0 44.58,52.38 45.02,52.99 2.46,1.23 0,0 44.58))',j.geom)
GROUP BY gid;

 gid |                                st_astext                                 
-----+--------------------------------------------------------------------------
   1 | MULTIPOLYGON(((15 5,5 10,10 20,40 10,15 5)),((30 20,10 40,45 40,30 20)))
(1 Zeile)

进一步阅读: