Select to view content in your preferred language

ArcMAP 10.4 - Multiple ring Buffer (0.5 m)- Arcpy

5089
19
01-01-2017 08:15 PM
AmilaThilanka
Deactivated User

Hello,

I want to create multiple ring buffer starting with 0.5 m, 1 m, 1.5 m, 2 m,..... up to 500 m around point object. I try to do it by Arcpy - 'MultipleRingBuffer_analysis', unfortunately, it takes very long time and end up with displaying an error.

(But I try it 10 m buffer interval 10 m, 20 m, 30 m, .....500 m, it nicely works)

Does anyone have experience of creating a large number of buffers around single point object....?

Since I'm working with Python (Arcpy), It could be the great help for me to have suggestions in python platform.

Thank you very much for kind attention.

19 Replies
DanPatterson_Retired
MVP Emeritus

That many buffers will take an inordinate amount of time because of the construction of the needed geometry.  Perhaps if you could elaborate on why you need that fine a buffer size, some alternate solution could be provided.

AmilaThilanka
Deactivated User

Sir,

I want to create a grid (Circular-sector grid with 0.5 m in the radial direction and 2.5 milliradians in cross-radial direction). So, I need similar operation like multiple buffers to obtain with 0.5 m in the radial direction. This grid helps me to extract slope information from TIN by every 0.5 m distance pixel. 

0 Kudos
DanPatterson_Retired
MVP Emeritus

what is your TIN point spacing? Is it in the order of magnitude of 0.5 m?  If not, then you can get away with a coarser resolution.  You intent still needs to be elaborated on.  Obtaining slope on such a fine scale is generally only done when the study area is exceptionally small.  Also, what was the resolution of the data used to derive the slope? sampling it at a scale smaller than what it was derived at doesn't mean that the data are reflective of the actual conditions on the ground.  You may be trying to obtain data that are not really representative of actual conditions, in which case, you would need to ground truth them... or confirm the results against slope derived from lidar data which I presume you must be using.

AmilaThilanka
Deactivated User

Sir,

I'm using LIDAR dataset so I can get minimum 0.3 m spacing and my study area is less than 1 square kilometres. Are there any other tool than MultipleRingBuffer_analysis or to achieve this task...? Since I need a buffer in vector (polygon) format, hope numpy/pythan approach could be applicable. 

0 Kudos
TieshengWu
Regular Contributor

Hi Amila,may be you can  try python like below:

def circle_poly(x,y,c1,c2,r):     #center, start angle, end angel, diameter
 ptc=arcpy.Array()
 pnt=arcpy.Point()

 n=100         # 100 points every arc, or other value
 for i in range(0,n+1):        # n is the number of points of the arc
  ang = (c1+(c2-c1)*i/n) * deg2rad
  pnt.X=x + r * math.cos(ang)
  pnt.Y=y + r * math.sin(ang)
  ptc.add(pnt)                 #
 return ptc  

Then :

pie=arcpy.Polygon(circle_poly(x0,y0,0,359,dia),sr )

By this way, I believe circles can be constructed with no error cause you can control the numbers of points of every  arcs.

By the way, It makes me remember my old post of  "How many points are need to construct a smooth circle" , I still wonder how the ArcMap platform decide the numbers of a circle.

0 Kudos
DanPatterson_Retired
MVP Emeritus

Do be aware that if you are trying to buffer a point at some distance using circle code... say 200 meters... at an increment of 0.5 meters, you are going to have to vary the number of points that represent the circle in an increasing fashion as you move away from the point location.  Circles are represented as an n-gon and not a true circle.  Even with 360 points per circle, each pair of points will represent a circle sector and the two points at distance from the circle centre form the terminus points of the sector's chord.  As you move further away from the center, the chord length increases and the area between sector divisions doesn't remain constant.  (at 100 m the spacing between 2 points forming a 1 degree sector is about 1.7453 m.)  To retain the representation of about 0.5 meters you will have to increase the point spacing accordingly beyond about 28.7 meters.

I you need to sample at a finite distance from a location, it would be easier to generate a dense fishnet of a desired spacing rather than try to produce points to form circles.  A dense fishnet will use fewer points to cover an equivalent area than those needed to using divided circle sectors.  The upside to a fishnet, is that the area of each grid cell will remain the same.

TieshengWu
Regular Contributor

Dan is right. The n value must be varied with diameter according to some formula. A dense fishnet should be better choice.

0 Kudos
JoshuaBixby
MVP Esteemed Contributor

I agree with Dan_Patterson‌ that it might be worth considering alternative approaches.

Since you are wanting concentric circles, is your expectation that each new buffer distance is a whole circle or a ring/donut?

0 Kudos
AmilaThilanka
Deactivated User

Thank you so much for the suggestions. Yes, Joshua, It's should be ring/donut. I found an image (attached) which shows the shape. Also, the shape of the patch (pixel) shouldn't be like a square.attached

0 Kudos