How to create nonuniform buffer in point layer.

05-06-2016 10:54 PM
Occasional Contributor II


I want  to create a buffer around line intersection point based on the distance

between intersection point and the closest vertex; so that the buffer distance

varies for each intersection point. I really appreciate any help you can provide.

0 Kudos
4 Replies
MVP Honored Contributor

What license level do you have?  An Advanced license gives you the most flexibility.  However, it is virtually certain that a custom script will be involved that employs cursors and dictionaries to do the analysis to find the closest vertex to the intersection and write a buffer distance field to the intersection point.

Do the lines that make up the line network connecting to the intersection points always have an end that is identical to the intersection point, or do the lines go through the intersection points?

Occasional Contributor II

Hi Richard,

I have ArcGIS advanced license. I agree with you on that a custom script would be needed.

Regarding your question about the lines, I have a polygon layer and there are 52488 polygons.

What I'm trying to do is exactly to find the closest vertex to the intersection and write a buffer

distance field to the intersection point.

I tried to run point distance analysis tool without specifying search radius value but this analysis

takes too much time considering total number of vertices and intersection points. So, It would

be great if you could suggest a solution to perform this analysis. Thank you.

0 Kudos
MVP Esteemed Contributor

If you have a threshold distance to an intersection point, which if memory serves you do,

  • create a buffer around your intersection points
  • intersect that buffer returning points as the object
  • each point returned will be the buffer distance away from the centroid UNLESS
    • a line segment that intersected the buffer had a point (aka, inflection in the line) closer to the intersection than the threshold distance.  Store those in a "todo" list


  • if you have 2 intersection points, toss them, I can't see any real world scenario where a road intersection could be any smaller than 45 degrees...alternately save them in a "ridiculous" list
  • if you have 3 or more intersection points, calculate your angle from the points to the centroid (I have code for this). So say your buffer intersects a crossroads (simple), there should be 4 intersection points, ideally at 90ish degrees to one another.
  • store those that don't meet angular conditions in a "toprocess list", toss the rest

You should not have a list of intersection points, the intersections with the buffer and their angles.

Those that are in the "todo" list... well figure out what you are going to do.  Make an assessment, or process them separately.

MVP Esteemed Contributor

Seems to me a good approach would be

  1. Feature Vertices To Point to create points from all vertices - allpts
  2. Use Point Distance tool with a very small distance (.01 meters)  to make a table of points with a coincident point.
  3. Do a join from your allpts dataset to this table, select for good matches (tbl.OBJECTID IS NOT NULL), these are the points you want to buffer. Copy these to a new points feature class xpts
  4. Thin xpts with the Find Identical tool.
  5. Switch selection, Copy these features to a new feature class vpts
  6. Use Near tool from xpts to vpts to find closest vertex, the distance will be in the DISTANCE field.
  7. You can now buffer the near output of xpts using the DISTANCE value for points with a match