I am trying to identify areas of contiguous conservation easements using the NCED data. Unfortunately, the ArcGIS Polygon Neighbors tool only analyzes first-order contiguity while I'd like to analyze recursively. This python script for QGIS worked fine but also only returns first-order contiguity.

As per the top comment under this question (@Hornbydd) I think the best approach would be to utilize the iterators in ArcGIS ModelBuilder but I'm not sure it's possible.

Any ideas on other ways to conceptualize this so that I don't have to use rely on the polygon neighbors tool?

Or is the best method really just to dig in with custom python scripting?

I'm platform agnostic but more experienced with ArcPy than python with qgis.

The dissolve method works but still keeps some areas separate that in practical terms are contiguous even if the polygons are separate... in the screenshot below the two red outlined polygons should be one contiguous area... likely an artifact of disparate data sources but it would be great to set a distance on this (0.5 miles). enter image description here

  • what do you mean when you describe "first-order contiguity", I guess abstractly what is first-order
    – ziggy
    Commented Jan 3, 2018 at 18:04
  • First-order refers to directly adjacent neighbors, I'm looking for neighbors and neighbors of neighbors, etc... see here: resources.arcgis.com/EN/HELP/MAIN/10.1/index.html#/…
    – mikeLdub
    Commented Jan 3, 2018 at 18:09
  • 4
    Dissolve with no multipart option. Result is your areas. Spatial join original to them if necessary.
    – FelixIP
    Commented Jan 3, 2018 at 18:21
  • 1
    If the Dissolve isn't outputting what you need based on desired result polygons, one likely solution will be to iterate through features in this layer with arcpy, Select by Location for each feature with a small search radius specified (e.g. 50 feet), and continually Add to Selection any returned features from a duplicate of this layer. Iterator would need to only proceed to returned features.
    – AlecZ
    Commented Jan 3, 2018 at 19:40
  • 1
    Buffer them by some reasonable distance?
    – FelixIP
    Commented Jan 3, 2018 at 19:46

1 Answer 1


The dissolve method is the best method. Due to the space between, you'll first need to buffer your polygons, then multipart-to-singlepart, then apply a unique ID to each buffer, spatially join that ID to your original polygons, then dissolve a final time by the ID.

I'd script the process if it is to be done repeatedly.


enter image description here

1) Buffer your polygons. Here I did .5 miles as the distance, but it should be .25 miles if you want your max distance to be .5 miles. enter image description here

enter image description here

2) Multipart to singlepart buffers. enter image description here

3) Open your singlepart feature class and add a UID field.

enter image description here

4) Calculate the field with unique values. I like the below method. enter image description here

Code block:

def UID ():
 global last
  last += 1
  last = 1
 return last

enter image description here

5) Spatially join your starting polygons to your singlepart buffers. You only need to bring in the UID field.

enter image description here

enter image description here

6) If you want a single feature per corridor, dissolve by your UID field.

enter image description here

Your final result: enter image description here

  • Thanks @EmilBrundage. This basically got me what I'm looking for but still returned inconsistent results. See edited question above.
    – mikeLdub
    Commented Jan 4, 2018 at 15:15
  • Wait I didn't dissolve my buffers...
    – mikeLdub
    Commented Jan 4, 2018 at 15:44

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.