如何仅在多边形外部进行缓冲而使共享边不被缓冲?

问题描述

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

经过一番搜索后,ArcGIS的缓冲向导+ dissolve确实可以做到这一点,但是不幸的是,没有Arcgis许可证,我正在寻找使用QGIS或其他平台(例如PostGIS)的解决方案。

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

的结果

所需结果:

Desired Result

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

添加一个来自JFK的修改后的图像以举例说明我想要的结果,黑色阴影的多边形是原始多边形,而多边形A和B是单独的缓冲多边形,具有三个缓冲面和一个非缓冲面( A,B接触的一侧)

enter image description here

解决方法

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

您可以在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,-10 10,-10 0,('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)

enter image description here