从较大的几何体中排除基于缓冲区的几何体
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 相交并创建一个新的 MultiPolygon
或 Polygon
,如果只剩下一个几何图形:
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)
进一步阅读:
我有一个多边形几何体,其中多边形几何体是分散的。我想排除不属于大几何的几何。例如下图是其中一个多边形太远的区域。我想根据缓冲区排除该多边形。可以使用什么功能来做到这一点?
您必须 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 相交并创建一个新的 MultiPolygon
或 Polygon
,如果只剩下一个几何图形:
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)
进一步阅读: