27

Is it possible to create a buffer around neighbouring polygons, so that the new polygons do not overlap?

Preferably in QGIS but any other tool will do.

So instead of the first result I would like to obtain something similar to the second:

enter image description here

PolyGeo
  • 65,136
  • 29
  • 109
  • 338
user3170702
  • 401
  • 4
  • 4
  • 2
    If you don't want your buffer to overlap, you could Dissolve the buffer polygons. However, it won't reflect your second image. – Joseph Jan 07 '16 at 12:10
  • 1
    I'd tend for some kind of raster solution, akin to this answer. – alphabetasoup Jan 08 '16 at 04:22
  • I don't know of a QGIS tool that could do it, but in theory you could compute the (possibly intersecting) buffers normally, and also compute the (generalized) Voronoi diagram of your polygons, and then intersect each buffered polygon with the Voronoi cell containing that polygon. The Boost C++ library has some Voronoi tools that could work, but it would be a lot of C++ glue code to write. – csd Mar 23 '17 at 21:34

5 Answers5

7

One way to do this, depending on the quality/complexity of the polygon layer, is with the following steps:

1) Extract vertices from polygons, ensuring a unique field is kept as an attribute

2) Create a voronoi from these points

3) Buffer the original polygons by the required amount

4) Subtract the buffer polygons from the voronoi

5) Recombine/dissolve the remaining voronoi polygons on the unique attribute field

When doing this in the past with slightly inconsistent datasets I've had to do additional steps to remove artefacts from within the new polygons:

  • Subtract original polygons from new layer to remove in-polygon artefacts
  • Add original polygons into new dataset
  • Recombine/dissolve again on key field

The advantage of the voronoi step (as also suggested by csd) is that it gives perpendicular boundaries, as your requirement diagram showed.

Some of these operations can take significant amounts of time though....

richardaeiou
  • 71
  • 1
  • 3
  • To add on to this, sometimes you might end up with polygons extending beyond where you want. You can fix this by using the split features tool on the advanced digitizing, then selecting and binning the parts you dont want – Luffydude Dec 10 '20 at 11:07
0

If you are able to have an ArcGIS account you can do this process easily through ArcGIS Online. When creating a web map through Arc GIS Online you can use a limited amount of analysis tools. The buffer analysis tool gives you options to overlap or dissolve the buffers. From there you can export that layer as a shapefile.

For QGIS, you will first want to use the Create Buffers tool and input whatever radius and radius unit you would like. Then you will go into your geoprocessing tools and use the Dissolve tool. This will dissolve the boundaries of your buffers and basically create something that looks like one large buffer.

nmtoken
  • 13,355
  • 5
  • 38
  • 87
The G of GIS
  • 663
  • 3
  • 11
  • 2
    The QGIS solution does not result in the Second image! My understanding is that the two orange polygons will have the attributes of the two green polygons and are not dissolved into one big polygon – RutgerH Jun 06 '17 at 21:28
0

if using raster-analysis is an option, cost distance algorithms might be a proper way. usually, these algorithms are provide distance and allocation-output as well - based on the allocation result (i.e. which pixel is closest to which object) a raster calculation that selects any pixel from allocation-raster with a distance < value (from distance raster) would provide the expected result.

robert tuw
  • 898
  • 1
  • 9
  • 20
0

If you're using R, the function regional_seas() from the {cartomisc} package can calculate non-overlapping buffer polygons.

The workflow is explained here: https://statnmap.com/2020-07-31-buffer-area-for-nearest-neighbour/

in short, the regional_seas() function does these steps automatically:

  1. merge input polygons
  2. create a buffer of the merged polygons
  3. sample points along the merged polygon outline
  4. create vonoroi polygons
  5. intersect vonoroi polygons by buffer created in step 2
  6. join vonoroi polygons with attribute info of input polygons
  7. remove overlapping vonoroi polygons that intersect two input polygons
  8. union vonoroi polygons by variable of interest

As input the regional_seas() function expects:

  • your input polygon layer
  • the grouping attribute
  • the buffer distance
  • the point sample density
Lennert
  • 437
  • 3
  • 12
-1

There is a recent Qgis Plugin named "Buffer Without Overlaps" tha works very fine and do not produce overlaps!

MLourdes
  • 198
  • 1
  • 6
  • That plugin does not do what the O.P. requests. While the output polygons do not overlap, wherever two polygons touched there is now a third polygon between then as if a buffer on a line had been done and the original polygons shrunk accordingly. – Bytor Feb 11 '23 at 19:13
  • YES, sliver polygons show up when dealing with polygons. See this post: https://gis.stackexchange.com/questions/336131/eliminate-sliver-polygons-qgis-3 – MLourdes Apr 14 '23 at 16:22