# How to use a specific AREA (km2) to create a buffer-like feature around a polygon (Area to Buffer)

How to create a buffer (or buffer-like feature) based on a specific area (in km2)?

I have a specific area (e.g. 14.5 km2) and would like to lay this area as a buffer (or something similar to a buffer) around a pre-existing, irregularly-shaped polygon.

This buffer should be of equal width around the polygon, so that I can extract the distance between the outer margins of the polygon and the newly created buffer.

Is there a way to do this? I'm using ArcGIS Pro 2.4.0.

• The buffer area without/excluding the buffered polygon should be for example 14.5, or including the polygon? How exact does it have to be, for example 14.4-14.6 is ok?
– Bera
Commented Apr 22, 2020 at 8:44
• Excluding the polygon. The buffer alone should be of the specified area.
– M_S
Commented Apr 22, 2020 at 8:45
• Your suggested accuracy is more than fine.
– M_S
Commented Apr 22, 2020 at 9:58

I think you will need to use arcpy, or a complicated Modelbuilder model.

Example which you will have to adjust (can with bad `while` conditions run forever):

``````import arcpy
arcpy.env.overwriteOutput = True

fc = r"C:\GIS\data\testdata\ak_riks.shp"
bufferarea = 400000000 #Goal
radius_increment = 100 #For each iteration increase buffer distance with this
good_enough = bufferarea*0.1

arcpy.MakeFeatureLayer_management(in_features=fc, out_layer='lyr', where_clause="{0} = '1487'".format(arcpy.AddFieldDelimiters(datasource=fc, field='KOM_KOD'))) #Im selecting one polygon to test with

arcpy.CreateFeatureclass_management(out_path='memory', out_name='tempfc2', geometry_type='POLYGON', spatial_reference=arcpy.Describe(fc).spatialreference) #Create temp output fc
icur = arcpy.da.InsertCursor(r'memory\tempfc2','SHAPE@') #Insertcursor to insert new rows into it

with arcpy.da.SearchCursor('lyr','SHAPE@') as cursor:
area_diff = good_enough*10
current_area = 0
for row in cursor:
while area_diff>good_enough and current_area < bufferarea+good_enough: #Buffer with increasing distance until these conditions are met. You should/have to adjust this line. To get optimal resultat without running forever
buffer = row[0].buffer(dist) #Buffer
buffer_diff = buffer.difference(row[0]) #Erase original polygon from buffer
current_area = buffer_diff.area #Find area
dist+=radius_increment #Increate buffer distance for next try
print('Success!')
icur.insertRow([buffer_diff])
``````

• Many thanks! Will try this.
– M_S
Commented Apr 22, 2020 at 9:47