【问题标题】:How to only buffer outside of the polygon and leave the shared edge un-buffered?如何仅在多边形外部进行缓冲并使共享边缘不缓冲?
【发布时间】:2021-02-04 14:27:06
【问题描述】:

我想要实现的是缓冲一组连接多边形,同时不缓冲共享边。

经过一番搜索,ArcGIS 的缓冲区向导 + 溶解完全可以做到这一点,但不幸的是没有 Arcgis 许可,我正在寻找使用 QGIS 或 PostGIS 等其他平台的解决方案。

下图显示了使用ArcGIS's buffer wizards + dissolve的结果

期望的结果:

主要挑战是将两个相邻缓冲区的重叠部分沿着与未缓冲多边形等距的线切割成两个不相交的多边形。

添加来自 JFK 的修改图像以通过示例详细说明我想要的结果,黑色阴影多边形是原始多边形,多边形 A 和 B 是具有三个缓冲边和一个未缓冲边的单独缓冲多边形( A、B 接触的一侧)

【问题讨论】:

    标签: buffer postgis polygon qgis


    【解决方案1】:

    文档说向导首先溶解多边形,然后在输出上应用缓冲区。

    您可以在 PostGIS 中执行相同的操作:st_collect 将几何图形聚合在一起,如果几何图形不相交,则会创建一个多多边形。 st_buffer 进行缓冲(以 CRS 为单位),st_dump 会将单个多部分缓冲区分解为单独的多边形。

    WITH src(geom) AS (values 
      ('POLYGON((0 0,0 10,10 10, 10 0, 0 0))'::geometry),
      ('POLYGON((0 0,0 10,-10 10, -10 0, 0 0))'::geometry),
      ('POLYGON((20 20,20 30,30 30, 30 20, 20 20))'::geometry))
    SELECT st_asText(
      (st_dump(
        st_buffer(
         st_collect(geom),
         1)
       )).geom)
    FROM src;
    
    ---------
     POLYGON((20 19,19.8049096779839 19.0192147195968,19.6173165676349 19.0761204674887,19.4444297669804 19.1685303876975,19.2928932188135 19.2928932188135,19.1685303876975 19.4444297669804,19.0761204674887 19.6173165676349,19.0192147195968 19.8049096779839,19 20,19 30,19.0192147195968 30.1950903220161,19.0761204674887 30.3826834323651,19.1685303876975 30.5555702330196,19.2928932188135 30.7071067811865,19.4444297669804 30.8314696123025,19.6173165676349 30.9238795325113,19.8049096779839 30.9807852804032,20 31,30 31,30.1950903220161 30.9807852804032,30.3826834323651 30.9238795325113,30.5555702330196 30.8314696123025,30.7071067811865 30.7071067811865,30.8314696123025 30.5555702330196,30.9238795325113 30.3826834323651,30.9807852804032 30.1950903220161,31 30,31 20,30.9807852804032 19.8049096779839,30.9238795325113 19.6173165676349,30.8314696123025 19.4444297669804,30.7071067811865 19.2928932188135,30.5555702330196 19.1685303876975,30.3826834323651 19.0761204674887,30.1950903220161 19.0192147195968,30 19,20 19))
     POLYGON((0 -1,-10 -1,-10.1950903220161 -0.980785280403231,-10.3826834323651 -0.923879532511287,-10.5555702330196 -0.831469612302547,-10.7071067811865 -0.70710678118655,-10.8314696123025 -0.555570233019605,-10.9238795325113 -0.382683432365094,-10.9807852804032 -0.195090322016134,-11 0,-11 10,-10.9807852804032 10.1950903220161,-10.9238795325113 10.3826834323651,-10.8314696123025 10.5555702330196,-10.7071067811865 10.7071067811865,-10.5555702330196 10.8314696123025,-10.3826834323651 10.9238795325113,-10.1950903220161 10.9807852804032,-10 11,0 11,10 11,10.1950903220161 10.9807852804032,10.3826834323651 10.9238795325113,10.5555702330196 10.8314696123025,10.7071067811865 10.7071067811865,10.8314696123025 10.5555702330196,10.9238795325113 10.3826834323651,10.9807852804032 10.1950903220161,11 10,11 0,10.9807852804032 -0.195090322016128,10.9238795325113 -0.38268343236509,10.8314696123025 -0.555570233019602,10.7071067811865 -0.707106781186547,10.5555702330196 -0.831469612302545,10.3826834323651 -0.923879532511287,10.1950903220161 -0.98078528040323,10 -1,0 -1))
    (2 rows)
    

    【讨论】:

    • 感谢您的回复!我应该更清楚,我想要的结果是在您的示例中为紫色多边形最后有 2 个单独的多边形。在三个边上缓冲,在两个多边形接触的边上不缓冲。我将使用您的示例的修改图像更新我的问题。
    猜你喜欢
    • 2021-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 2012-11-19
    • 2015-07-21
    • 2017-12-17
    相关资源
    最近更新 更多