Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import arcpy, math
- arcpy.env.overwriteOutput = True
- #Change to match your data:
- arcpy.env.workspace = r'C:ArendenDefault.gdb'
- boundries = r'Boundries'
- points = r'bufferpoints'
- out_feature_class = r'GrowPoints'
- #Change to match your desired size of polygon, ok difference and step in buffer radius increase
- size = 7500
- ok_diff = 500
- increment = 5
- arcpy.CreateFeatureclass_management(out_path=arcpy.env.workspace, out_name=out_feature_class,
- geometry_type='POLYGON',
- spatial_reference=arcpy.Describe(points).spatialReference)
- arcpy.MakeFeatureLayer_management(in_features=boundries, out_layer='blyr')
- with arcpy.da.SearchCursor(points,['OID@','SHAPE@']) as cursor:
- for row in cursor:
- bufferstart = math.sqrt((size/math.pi))
- sql = """{0} = {1}""".format(
- arcpy.AddFieldDelimiters(points,arcpy.Describe(points).OIDFieldName),row[0])
- arcpy.MakeFeatureLayer_management(in_features=points, out_layer='pointlyr',where_clause=sql)
- arcpy.SelectLayerByLocation_management(in_layer='blyr', overlap_type='INTERSECT',
- select_features='pointlyr')
- if [i[0] for i in arcpy.da.SearchCursor('blyr','SHAPE@AREA')][0] > size:
- area = 1
- while abs(size-area)>ok_diff:
- print area
- arcpy.Buffer_analysis(in_features='pointlyr', out_feature_class=r'in_memorypoint',
- buffer_distance_or_field="{0} Meters".format(bufferstart))
- arcpy.Clip_analysis(in_features=r'in_memorypoint', clip_features='blyr',out_feature_class=r'in_memoryclipbuffer')
- area = [i[0] for i in arcpy.da.SearchCursor(r'in_memoryclipbuffer','SHAPE@AREA')][0]
- bufferstart+=increment
- arcpy.Append_management(inputs=r'in_memoryclipbuffer', target=out_feature_class, schema_type='NO_TEST')
- else:
- print 'Impossible to fit buffer inside boundry for point number: ',row[0]
Add Comment
Please, Sign In to add comment