Select to view content in your preferred language

Buffering by percentage instead of distance?

4541
10
05-07-2021 06:31 AM
dlj19220301
Emerging Contributor

Pretty simple question. I have a shapefile of different-sized polygons, but I don't want to buffer them by a uniform distance. I want to reverse buffer them by a percentage. An example would be buffering each polygon by -50%. 

I don't know if this is already a built-in option. Or do I need to calculate a field in my attribute table with this value, and then set the buffer option to "field" instead of by "distance"? 

Thoughts? 

0 Kudos
10 Replies
JoeBorgione
MVP Emeritus

50% of what?

That should just about do it....
0 Kudos
dlj19220301
Emerging Contributor

50% of the existing polygon's area. So instead of buffering by a constant distance (eg. 50 meters), you would buffer by a percentage (eg. each polygon would get 50% bigger). so the distance would obviously change depending each polygon's existing area size). 

0 Kudos
JoeBorgione
MVP Emeritus

You are mixing apples and oranges here:  a buffer distance is a linear distance measurement:  " I want to create a buffer around my polygons that extends 25 feet from the edge.

Area of a polygon is in square units of measurement:  " I have a polygon that is 500 square feet:  50% of 500 square feet is 250 square feet".

What is the equation to enlarge an irregularly shaped polygon such that the original shape is maintained?  I'm not smart enough to figure that out.  Maybe somebody else can...

@DanPatterson : you are a way better mathematician than I'll ever hope to be...

That should just about do it....
0 Kudos
dlj19220301
Emerging Contributor

All I'm asking is this - when you open the Buffer geoprocessing tool, you have to input a linear unit (meters, feet, yards, whatever) to buffer all of your polygons by. But I don't want to buffer all my polygons by a constant value. I want them buffered by a percentage. Let's say 10%. So this way, in my output shapefile, a polygon that was originally 50sq meters will now be 55sq meters. While a polygon that was originally 1,000sq meters will now be 1,100sq meters. One is buffered by 5 meters and the other is buffered by 100 meters. 

So is there an option to do this in the Buffer tool? 

Like I said, there's an option to buffer by field.  So I'm guessing  I have to run that calculation out into field attributes, and then buffer by that field. 

0 Kudos
DanPatterson
MVP Esteemed Contributor

@JoeBorgione ... I did a blog post (somewhere) of buffering.  I have a toolset that does an offset buffer (aka, no rounded corners) when I wanted to just increase the size of a polygon by a percentage.

If you want the rounded corners, you need to iterate through buffer increments until you narrow down the buffer to your acceptable tolerance.

I never pursued it much or put it into my Free Tools toolbox since the "market" was pretty well limit3d to educational esoterica.  


... sort of retired...
0 Kudos
JoeBorgione
MVP Emeritus

That's cool Dan:  I think I downloaded your table tools a while ago.

That should just about do it....
0 Kudos
DanPatterson
MVP Esteemed Contributor

I am working on releasing a new version within a month-ish will loads more goodies.  I will PM you when Spyder 5 is updated again so I can finish the help topic screen grabs.


... sort of retired...
DanaNolan
Frequent Contributor

Have you looked at Increase Polygon Area tool? It has minimum area as one parameter, though it still uses a linear distance as another parameter. I don't know if it accepts negative buffers.

If you can get a script to calculate your value based on your shape, so you can create a linear distance, store it in a field and Buffer by field value.

0 Kudos
QMT
by
Emerging Contributor

I may create a new question, but I have a "buffer by percentage" issue also. I have a bunch of roughly rectangular, contiguous polygons (X, Y, Z, etc) filled with hundreds of very irregular-shaped polygons (watersheds). I would like to be able to create a scenario where the edges of X polygon are determined by what percentage of each edge watershed was within X polygon, >50% for instance. So that if 50% or more of the watershed were in X, then X gets that watershed, if <50% then the watershed belongs to the bordering Y polygon. Is there a tool that can do this?

0 Kudos