I have two relevant layers for this problem:

  1. Real estate parcels (point data)
  2. Multiple ring buffer layer - contains multiple buffer rings around each particular real estate parcel. (0.5, 1, 1.5, and 2 miles).

There are 2900 real estate parcels, each one a multiple ring buffer layer containing 4 quartiles. The buffer layer table has 2900*4 entries since each parcel has 4 buffer layers.

I need to join the buffer layers with the parcel they were created from, and there doesn't seem to be an easy way. Any tips on a useful tool?

  • 2
    The Union tool requires polygon layers for all inputs, so it will not work to combine point and polygon layers. Spatial Join is normally the way to associate the attributes of points and polygons together, but I would think the buffer tool already preserved the point attributes in the buffers created from them. Did you not do that? Points and polygons cannot be directly combined. Either you have to buffer the points a small amount to append them to the buffers, or you need to extract centroid points from the buffer polygons to append them to the real estate parcel points. Dec 2, 2014 at 0:53
  • So I guess I need to extract the centroids to line these up. Doing a spatial join from the buffer layer means nothing if I can't identify the points from which these buffer rings originated. Is there a simple command to extract the centroid? I'll then need to use that centroid to join the buffer rings to the real estate layers. Dec 2, 2014 at 0:58
  • I agree Richard, usually the attributes are preserved in the buffer but if the attributes weren't preserved, or were updated after the buffer, then I'd go the centroids (feature to point tool). Even when buffered (so long as the buffer isn't dissolved) the centroid should be fairly much in the same location, then use intersect/identity against the original parcels. In future consider adding a link-id before buffering to allow attribute joins should the need arise. Dec 2, 2014 at 0:58
  • @MichaelMiles-Stimson. Is there an easy way to get the centroids and use that to join the real estate parcels to the buffers rings? Dec 2, 2014 at 1:15
  • Use the feature to point tool help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//… to get centroids of your buffers but before that add a field (int type) called link_id and copy your FID into it. Unlike geodatabase features the OID (FID) in a shape file is not fixed and can change during an operation, however the attributes don't change. After intersecting use attribute join to copy values help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/…. Dec 2, 2014 at 1:43

1 Answer 1


I did not know that the FID was not preserved by this tool. Strange. As Chris recommended, calculate a unique ID for each point before you use the buffer tool.

The unique ID I use for all my points is a concatenation of the X and Y coordinates in a text field I call XY_LINK. You should be able to create a join field without creating any new feature class. Create a text field that is long enough to hold 2 coordinates and 4 curly brackets (not a comma, since I find that causes Join issues). Then do a Python Field Calculation on the points like this (this works for State Plane coordinates):

Parser: Python

Show Codeblock: Checked

Pre-Logic Script Code:

def Output(FirstPoint):
  FPX = round(float(FirstPoint.X), 4)
  FPY = round(float(FirstPoint.Y), 4)
  return "{%(FX)012.4f}{%(FY)012.4f}" % {'FX': FPX, 'FY': FPY}

Your XY_LINK Field Name: Output(!Shape.CENTROID!)

This creates a 28 character point descriptor that is unique if no points overlap. An example from my data is: {6130961.7120}{2261115.2232} You may have to mess with the formatting of the number to work for your coordinate system depending on the resolution and tolerance of your layers. 012.4f might be 015.8f or something else that works for your data. (Note it added a trailing 0 to the X coordinate so that the numeric digits of each coordinate are always 12 characters so that they can be always be parsed from the same character position in every string and they sort numerically)

Index the XY_LINK field in both the point layer and the polygon layer and you should find that the correct point will show up when you make the polygon layer the target and the point layer the join layer. Or perform a relate from your point to your polygons to see if they select the correct set. The tolerance adjustment of the buffering process may make the rounding not work, but if this XY_LINK ID is calculated on the points before you do the buffer it provides a unique ID that also tells you if the point still exists in that location using Joins and standard SQL. You can also use the FID in a static long field as a secondary join to identify points that were moved rather than created new (i.e., the XY_LINK won't match if you recalculate them but the FID will).

  • I probably should have inquired whether or not there is any unique parcel ID associated with your points, since that attribute should have been included in the ring buffers. If that exists you can Join or relate on that field. The XY_LINK approach has benefits aside from fixing your problem, but a unique parcel ID would work to deal with your initial concern. Dec 2, 2014 at 13:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.