Select to view content in your preferred language

Creating multiple non-overlapping buffers

363
11
2 weeks ago
Labels (2)
GeoQuest4567
New Contributor

Dear Community,

I am trying to use the Multiple Ring Buffer tool to create a set of non-overlapping buffers (e.g., 100 m, 200 m, 300 m, 400 m) around 50 polygons, which are different sites. I am running into a few challenges:

  1. The non-overlapping option of the dissolve parameters creates multipart buffers, whereas I need them to be singleparts (i.e., each buffer around each site should be a separate polygon). Trying the multipart to singlepart tool does not work because some of these buffers overlap, as some sites are somewhat close to one another.
  2. Whereas the overlapping option of the dissolve parameter returns the attributes of the original polygons (around which buffers are formed), the non-overlapping option does not return the attributes of the original polygon.

 To sum up, I am trying to generate a series of non-overlapping buffers (rings) around multiple sites. Then, I need to know which buffer is associated with each site, so I would ideally have an attribute in the buffer shapefile that corresponds to the site id.

I would be grateful for any suggestions on how to achieve this!

11 Replies
BobBooth1
Esri Regular Contributor

Might try using the multi-ring buffer tool in a ModelBuilder model with an Iterator.

https://pro.arcgis.com/en/pro-app/latest/help/analysis/geoprocessing/modelbuilder/iterators-for-loop...

Use Inline Variable Substitution so each of the output feature classes (one for each of the sets of buffers) has a unique name.

https://pro.arcgis.com/en/pro-app/latest/help/analysis/geoprocessing/modelbuilder/inline-variable-su...

Append the feature classes together.

https://pro.arcgis.com/en/pro-app/latest/tool-reference/data-management/append.htm

 

BobBooth1
Esri Regular Contributor

You could set up a model to use the ordinary buffer tool. Buffer the input polygons once. Then buffer the resulting features, and then buffer the next set of resulting features. Then, append two of the result feature classes into the other one.

Seems like it works.

buffer_and_append.png

results.png

0 Kudos
Ed_
by MVP Regular Contributor
MVP Regular Contributor

For this part "Then, I need to know which buffer is associated with each site" maybe try: the buffer, since it's a circle, its centroid should be pretty close to the site centroid. So, with those centroids you can do a nearest spatial join to get the site id to know which buffer goes with which site. I am sure there might be a better straight froward way to do this.

For the sites that are completely within its buffer with no other site overlapping that buffer, you may try a completely within spatial join

Question | Analyze | Visualize
0 Kudos
DavidPike
MVP Notable Contributor

I think you have a simple option of a spatial join to the original points with 'Have their Center in'.  the Centroid of any buffer ring will have a centroid coincident with the site.

0 Kudos
AlfredBaldenweck
MVP Regular Contributor

Multiring buffer should include data with the original feature. Unfortunately, as you have found out, that doesn't work if the Donut option is chosen. Here's a relevant Idea: Analysis Tools: Multiple Ring Buffer: Don't dissol... - Esri Community

To Ed's point, it turns out the centroids of each buffer are different, which is super frustrating.

So, here's a toolbox with two tools to fix that.

They turn the disc output of multiring into donuts without sacrificing the attributes.

AlfredBaldenweck_0-1745251953511.pngAlfredBaldenweck_1-1745251970300.png

 

BeforeAfter

 

One tool (Punch out buffers) works after you've made the buffers, while Clean Donuts buffers the input feature and gets the nice donut result all in one go.

I've only lightly tested these, so your mileage may vary, but it's worked for me so far.

I'll be sharing this toolbox to that Idea as well.

DavidPike
MVP Notable Contributor

I don't understand how or why the Centroids would be different for a donut annulus, even for multipart polygons.

AlfredBaldenweck
MVP Regular Contributor

I don't know why either, but here's the proof:

When I was figuring out the code, my initial thought was to go by centroid.

AlfredBaldenweck_0-1745255144353.png

AlfredBaldenweck_1-1745255881506.png

Note that the buffers and the original point are in this coordinate system.

AlfredBaldenweck_2-1745255958466.png

AlfredBaldenweck_3-1745257656345.png

Original point at the bottom, with the other three buffer centroids above.

You also get different stuff if you check arcpy geometry.

So, anyway. They do not have the same centers, which means that if you try to match centroids, you won't get any results.

My solution was to check the ORIG_FID field and work with that. You can check my code to see how I did it.

 

Full disclosure, I have a hard time with coordinate systems and stuff, so that may be another wrinkle to this, but I tried to keep everything consistent while testing this.

0 Kudos
AlfredBaldenweck
MVP Regular Contributor

Also, to be fair. That initial test I just showed was buffered geodesic. Buffering planar (again, keeping spatial references consistent) gives a much tighter spread, but a spread regardless.

AlfredBaldenweck_4-1745258144282.png

 

0 Kudos
DavidPike
MVP Notable Contributor

I've done the same using a 'normal' coordinate system and all the Centroids are the same as I'd expect.  Calculate Geometry Attributes and Spatial Join 'Have their Centre in' work as expected.

I think this may be Aerial distortions from using WMAS coordinate system.  I would guess that if you did the same experiment in the Southern Hemisphere that you would see the opposite drift of Centroids.

Or it's some difference in versions causing the default to be 'inside' which seems a bit unwanted to me.

0 Kudos