Patch Analysis
Summary
Finds the route through a corridor polygon that minimizes the patch-to-patch gaps an animal must cross moving between termini, using patches of good habitat as stepping stones — and reports the critical gap, the largest expanse of unsuitable habitat the species must cross in one push, for every pair of termini. Presumably you know the largest gap the species can cross (from foraging movements or juvenile dispersal); this tool tells you the largest gap the corridor will make it cross. Distances are exact shortest paths inside the corridor polygon, reported as geodesic meters. A modernized port of the CorridorDesigner Evaluation Tools' Patch Analysis; no Spatial Analyst needed.
Why the longest gap, not the total distance
The route is the path between termini through a minimum spanning tree of the patch network — a variation on Kruskal's algorithm (O'Rourke 1998). A minimum spanning tree minimizes the longest edge on the route, which is the biological question: the animal rests and refuels in the patches, so what limits it is the single worst crossing, not the total distance walked. If no patches are supplied (or none qualify), the tool simply reports the minimum distance between termini while staying inside the corridor.
Whenever a straight connector between two patches would leave the corridor, the tool computes the exact shortest path through a visibility graph of the corridor polygon: true straight-line hops around the corridor's own corners, with no raster approximation, and it runs in seconds even on a real corridor.
The output
A polyline feature class of the gap crossings, one row per
segment, with From_Name and To_Name
(the terminus or patch at each end), Length_m
(geodesic meters), Rank (1 = the longest
crossing), and which termini pairs each segment serves —
every number in the messages report is also here in the
attribute table, ready to summarize or map without re-reading
the report. Restrict the stepping stones with the patch
selection expression (for example, only population-sized
patches from Create
Habitat Patches: Class_Name = 'Population
patch') — or leave it blank to use every patch
feature; there is no need to build a selection that matches
everything.
A tour of the dialog
The example is Metric 1 of the Corridor Evaluation Tutorial: the 2% black bear corridor, its termini, and its habitat patches.
- Corridor polygon. The corridor slice to evaluate, picked from the map or browsed to. If the layer has a selection, only the selected polygons are used.
- Termini polygons and Terminus name field. The wildland blocks or corridor endpoints the route must run between, and the field whose values group them: features sharing a value are treated as one terminus. A selection on the termini layer is honored too.
- Habitat patch polygons and Patch selection expression. The stepping stones, and an optional query restricting them to the patches that matter, population-sized ones, say. Leave the expression empty to allow every patch, and omit the patches altogether to measure the bare terminus-to-terminus distance.
- Output connector feature class. The name and location of the result: the gap crossings, with their endpoints, lengths and ranks.
- Simplification tolerance. How far, in meters, the corridor boundary may be simplified before the routing; blank chooses a tolerance automatically and 0 turns simplification off.
ModelBuilder
Parameters
| Label | Explanation | Data type |
|---|---|---|
| Corridor polygonRequired · corridor | The corridor being evaluated. | Feature Layer |
| Termini polygonsRequired · termini | The wildland blocks / corridor endpoints. | Feature Layer |
| Terminus name fieldOptional · name_field | Features sharing a value are treated as one terminus. | Field |
| Habitat patch polygonsOptional · patches | The stepping stones; omit to measure the bare terminus-to-terminus distance. | Feature Layer |
| Patch selection expressionOptional · patch_where | Restrict to patches that matter (e.g. only population-sized). | SQL Expression |
| Output connector feature classRequired · out_fc | The gap crossings, with endpoints, lengths, and ranks. | Feature Class |
| Simplification toleranceOptional · simplify_tolerance | Corridor boundary simplification in meters (blank = automatic; 0 = none). | Double |
Python
import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt") # your install path
arcpy.jenness.PatchAnalysis(
corridor=r"D:\corr.gdb\bear_2pct_corridor",
termini=r"D:\corr.gdb\Wildland_Blocks",
patches=r"D:\corr.gdb\blackbear_patches60",
patch_where="Class >= 2",
out_fc=r"D:\corr.gdb\bear_gap_crossings")
Recommended citation
Credits and references
By Jeff Jenness, Jenness Enterprises (www.jennessent.com), ported from the CorridorDesigner Evaluation Tools by Jenness, Majka and Beier.
- Beier, P., D. Majka, and J. Jenness. 2007, revised 2026. Designing wildlife corridors with ArcGIS: ArcGIS Pro edition. Workshop book, revised by J. Jenness for the Corridor Designer Tools of the Wildlife and Forestry Tools add-in. Available at: CorridorDesigner_WorkshopBook_2026_ArcGISPro.pdf (5 MB)
- Jenness, J., D. Majka, and P. Beier. 2014. CorridorDesigner Evaluation Tools. Available at: corridordesign.org (archived copy at the Internet Archive)
- O'Rourke, J. 1998. Computational geometry in C, 2nd ed. Cambridge University Press, Cambridge. doi.org/10.1017/CBO9780511804120
Licensing information
Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required.
Related tools and pages
- Corridor Evaluation Tutorial — Metric 1 is this tool.
- Create Habitat Patches — the stepping stones.
- Bottleneck Analysis — the width question to this tool's gap question.