Least-Cost Corridor

Corridor Designer Tools · Build and Modify Corridors · geoprocessing tool · by Jeff Jenness
Works at every ArcGIS Pro license level

Summary

Builds least-cost corridor polygons between every pair of Wildland Blocks in an Identify Termini Polygons output, for every category present. The tool combines the accumulated cost-distance from each block into a corridor surface — lowest along the literal least-cost path, the path of least resistance, and rising away from it — computed internally with no Spatial Analyst, then extracts the surface at a series of percentile-width thresholds as polygons. Geodesic distances are used automatically on a geographic coordinate system. A modernized, generalized port of the original CorridorDesigner CorridorModel tool.

Learn more About Corridor Design covers cost distance, corridor slices and how wide a corridor should be; About Land Facet Corridors covers the corridor-per-facet design. Step 7 of the Corridor Design Tutorial and Step 4 of the Land Facet Tutorial both run this tool, with the tutorial data (41 MB) available to download so you can follow along.

One tool for both corridor workflows

This tool serves the traditional corridor analysis and the land facet analysis alike. In the traditional workflow, its most common use, the cost surface is a species habitat-suitability surface inverted to cost, and the result is the classic CorridorDesigner corridor between two protected blocks. In the land facet workflow the same machinery builds a corridor between each facet's concentrations, with the cost surfaces coming from Land Facet Mahalanobis. The tool works identically either way; the Category fields on its input and output simply mean whatever the termini were grouped by — species surface or land facet alike.

The first parameter is the termini, not the blocks Two steps happen elsewhere first: turning a “high is good” surface into a cost surface is Invert Raster (or use a Mahalanobis D² surface, which is already cost), and finding where the corridor should touch down inside each block is Identify Termini Polygons. This tool's first parameter is that termini output — an easy mix-up, since both it and the raw blocks layer describe “Wildland Blocks.” The termini feature class carries Category, CategoryID and Block fields; the tool checks for them and explains plainly if the wrong layer is picked.

Blocks, pairs, and the corridor surface

A corridor connects two Wildland Blocks — never two termini inside the same block, since a block is already protected ground. Blocks are identified by the small 1, 2, 3… numbers the termini tool assigned (the Wildland Block pairs parameter is a picker built from the pairs actually present, so you never look the numbers up by hand). With more than two blocks, a corridor is built for every pair by default, and you have the option to generate corridors between all pairs of blocks or only specific pairs. For each pair and category, the accumulated cost from block A's termini plus the accumulated cost from block B's is summed into the corridor surface, whose value at any cell is the total cost of the best route through that cell; the percentile slices (as a percentage of the analysis area) turn it into nested corridor polygons, from the lean spine outward.

A tour of the dialog

The example is the land facet run from the Land Facet Tutorial, eighteen facets in one pass.

The Corridor Designer Tools gallery open on the ribbon, with the Least-Cost Corridor button, in the Build and Modify Corridors row, outlined in blue
Where to find it: Least-Cost Corridor is in the Build and Modify Corridors row of the Corridor Designer Tools gallery, in the Corridor Designer Tools group of the Wildlife and Forestry tab.
The Least-Cost Corridor geoprocessing pane for the land facet run: termini feature class Land_Facet_Cluster_Density_Termini, cost raster workspace Test_Data.gdb, output workspace Test_Data.gdb, output raster name prefix Cor, output corridor polygon feature class Facet_Corridors, percentile-width thresholds 0.1 and 1 through 10 percent of the analysis area, Wildland Block pairs and categories left at all
Many categories at once: the termini feature class carries a category per facet, and instead of a single cost raster the tool is given the workspace holding the eighteen Mahalanobis surfaces. It matches each facet's termini to its cost surface through the records the earlier tools stamped into the metadata. The percentile thresholds are the slices to cut; block pairs and categories are left at all.
Every corridor slice of every facet drawn at once over a topographic base: nested bands from pale yellow at 0.1 percent through greens to blue-violet at 10 percent, covering nearly the whole landscape between and around the two wildland blocks outlined in yellow
What the run returns: every slice of every category in one feature class, 209 polygons here, each tagged with its category and percentile. A definition query on the Percentile field pulls out one slice per category.

The single-category form is the same dialog with a cost raster given directly. Here it builds the interspersion corridor of the Land Facet Tutorial from the diversity termini and the inverted diversity surface; a species corridor from a habitat model works the same way.

The Least-Cost Corridor geoprocessing pane for the diversity run: termini feature class Facet_Diversity_Termini, cost raster Inv_Facet_Diversity as a single category, output workspace Test_Data.gdb, output raster name prefix DivCor, output corridor polygon feature class Diversity_Corridors, the default percentile thresholds, block pairs and categories left at all
One category: a termini feature class and one cost raster.
The interspersion corridor between the two wildland blocks over the diversity surface: nested slices from 0.1 to 10 percent, the 1 percent slice cross-hatched in red running from the eastern edge of the Tumacacori block northeast to the southern part of the Santa Rita block, crossing the Santa Cruz valley floor at its narrowest, with the diversity termini in brown filling the blocks
The result of that run: the interspersion corridor, all slices, with the 1% slice cross-hatched. It leaves the Tumacacori block on its eastern edge, crosses the valley floor where the band of uniform, low-diversity ground is narrowest, and climbs into the dissected country of the Santa Rita block.

The tool holds the whole raster in memory at once, so the memory it needs grows with the number of cells. On most rasters that is no concern. On a very large one the tool may need more memory than your computer has free, and then one of two things happens: Windows starts using the disk as overflow memory and the tool slows to a crawl, or the tool stops with an out-of-memory error. There is no fixed limit; it depends on how much memory your computer has free. If a raster is too large, clip it to the area you need first.

ModelBuilder

A ModelBuilder diagram: Facet_Diversity_Termini, Inv_Facet_Diversity and the Test_Data.gdb workspace feeding Least-Cost Corridor, producing Diversity_Corridors
The single-category chain: termini, one cost raster and the output workspace in; the corridor feature class out.
A ModelBuilder diagram: Land_Facet_Cluster_Density_Termini and two Test_Data.gdb workspace inputs feeding Least-Cost Corridor, producing Facet_Corridors
The termini, the cost-raster workspace and the output workspace in; the corridor feature class out (the per-category cost rasters land in the output workspace).

Parameters

LabelExplanationData type
Termini feature classRequired · in_termini The Identify Termini Polygons output (not the raw blocks layer). Feature Layer
Cost raster (single category)Optional · cost_raster One cost surface, for a single-category run. Raster Layer
Cost raster workspaceOptional · cost_workspace A workspace of per-category cost rasters — e.g. Land Facet Mahalanobis's or Invert Raster's output workspace; matched to categories by their records. Workspace
Output workspaceRequired · out_workspace Home for the corridor cost rasters. Workspace
Output raster name prefixOptional · out_prefix Prefix for the per-corridor rasters. String
Output corridor polygon feature classRequired · out_fc The corridor slices, attributed by category, block pair, and percentile. Polygons are written widest slice first, so each narrower slice draws on top of the wider ones, and the layer arrives symbolized by Percentile with a graded color ramp and a partly transparent fill. Feature Class
Percentile-width thresholdsOptional · percentiles The slices, as % of the analysis area. Double (multiple)
Wildland Block pairsOptional · block_pairs Which pairs to connect (default: all pairs present). String
Categories to processOptional · facets Restrict the run to chosen categories (default all). String

Python

import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt")  # your install path
arcpy.jenness.LeastCostCorridor(
    in_termini=r"D:\corr.gdb\Facet_Termini",
    cost_workspace=r"D:\corr.gdb",
    out_workspace=r"D:\corr.gdb",
    out_fc=r"D:\corr.gdb\Facet_Corridors",
    percentiles=[0.5, 1, 2, 5])

Recommended citation

Jenness, J., D. Majka and P. Beier. 2026. Least-Cost Corridor. Wildlife and Forestry Tools add-in for ArcGIS Pro, v. 1.99 (September 2026). Jenness Enterprises. Available at: https://github.com/JeffJenness/Wildlife_Tools.

Credits and references

By Jeff Jenness, Jenness Enterprises (www.jennessent.com), ported from the CorridorDesigner tools by Jenness, Majka and Beier.

Licensing information

Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required — the cost-distance accumulation is computed internally, with no Spatial Analyst.