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

标签 buffer postgis polygon qgis

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

经过一些搜索,ArcGIS 的缓冲区向导 + 溶解正是这样做的,但不幸的是没有 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,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)

enter image description here

关于buffer - 如何仅在多边形外部进行缓冲而不缓冲共享边?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64467533/

相关文章:

postgresql `syntax error at or near "SUPPORT"` 更新 postgis 扩展

r - 计算 shapefile 中的多边形

java - 如何在具有撤消功能的缓冲区上绘制?

c++ - 统一缓冲数组元素不正确

java - org.postgis.PGgeometry 无法转换为 org.postgis.PGgeometry

java - Hibernate Spatial 5 - GeometryType

javascript - 如何在 Javascript 中查找/创建 GPS 点的凸包

c# - 多边形三角剖分 c#

c - 缓冲区溢出或其他

go - Golang中如何处理字节运算符?