I have a bunch of Census Tracts that I want to spatially join with larger neighborhood geographies so that the numeric fields of the Census Tracts are summed on the join.

A spatial join based on intersection won't work because some of the tracts intersect multiple neighborhoods. So I really want to join based on what neighborhood the centroid of the tract falls in.

However, when I run the spatial join tool with the center, it appears that center is only based on the target layer not the join layer. In older versions of ArcMap, I know I could run the Feature-to-Point tool to create a new feature of the tracts' centroids and then could run the spatial join that way. But this tool either doesn't exist anymore or isn't available with a basic license.

Does anyone have any workarounds? Or is there a better way to do this?


While Feature to Point won't work with a Basic License, you can overcome this limitation with a few steps.

  1. Add a set of X_COORDINATE and Y_COORDINATE double fields and a Long field called TRACT_FID to the Tracts table.
  2. Populate the coordinate fields using the geometry calculator or with a Python Calculation of !Shape.Centroid.X! and !Shape.Centroid.Y!. Populate the TRACT_FID field with the Tract ObjectID values to act as a Join field.
  3. Open the table and export it from the table view menu to create a standalone table.
  4. Use the Make XY Event Layer tool using the two fields as the coordinate fields.
  5. The new XY layer is the equivalent of the Feature to Points tool output. Use that layer as the Join input for the Spatial Join tool.
| improve this answer | |
  • Oh thanks! That sounds very promising. Let me try that. – Alex Pudlin Aug 9 '15 at 18:57

You could try the HAVE_THEIR_CENTER_IN match_option parameter of Spatial Join.

The features in the join features will be matched if a target feature's center falls within them. The center of the feature is calculated as follows: for polygon and multipoint the geometry's centroid is used, and for line input the geometry's midpoint is used.

| improve this answer | |
  • I had tried that option. The problem is that since the target layer is the neighborhoods, it only joins the census tracts that overlap with the neighborhoods' centroids. What I really want is a join if the center of the tract intersects a neighborhood but I can't find an option for matching on the join feature's center, just the target feature's. – Alex Pudlin Aug 9 '15 at 1:19

Switch definition of target and join layers (make tracts target, and neighborhoods join). The geometry of the output will be rubbish (will be tracts), but the table will be correct..i.e. each tract will have the correct neighborhood. Then dissolve the output by the neighborhood name and use SUM or some other statistic to merge the field you care about. Again, geometry is rubbish, but the table is correct. Join this output shapefile back to the original neighborhood file, export and save a copy, and delete all unnecessary row.

| improve this answer | |
  • This also sounds like a good method! Thanks for the help! – Alex Pudlin Aug 9 '15 at 18:58

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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