【问题标题】:Exclude the geometry based on buffer from the bigger geometry从较大的几何图形中排除基于缓冲区的几何图形
【发布时间】:2021-11-21 04:38:18
【问题描述】:

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

【问题讨论】:

    标签: sql postgresql postgis spatial-query


    【解决方案1】:

    您必须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 是否与给定的多边形/缓冲区相交并创建一个新的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)
    

    进一步阅读:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2013-07-19
      • 1970-01-01
      • 2019-01-18
      • 2019-07-07
      相关资源
      最近更新 更多