Classification System Builder

Topographic Analysis · TPI Tools · interactive window · by Jeff Jenness
Works at every ArcGIS Pro license level

Summary

Creates, edits, duplicates and deletes the reusable classification systems applied by the Slope Position Classification, Landform Classification and General Raster Classification tools. A classification system is a named set of rules: the classes, each with a value, a name and a color, and the threshold criteria that put a cell into each class. It is authored once here, and then picked from a dropdown in any of those tools, so the output raster arrives with its class names and colors already attached. Ten systems ship with the add-in, among them 6-class slope-position and 10-class landform systems adapted from Weiss's (2001) classification system and the Corridor Designer 4-Class Topographic Position system used in the Corridor Design Tutorial. Systems are saved as JSON files in a per-user folder that survives add-in reinstalls, so custom classifications stay available and can be shared with colleagues through the Builder's Export and Import buttons. The Builder opens from the TPI Tools menu on the ribbon.

Learn more About TPI explains the Topographic Position Index, the slope-position and landform classifications built on it, and the choice between raw and standardized thresholds that every system here has to make.

What a classification system holds

A system belongs to one of three families, which decides which input rasters its rules can refer to:

Besides its family, a system has a name, which is what the tools list, a free-text description, and, for the two DEM families, the slope units its slope thresholds assume, degrees or percent. Then come the classes. Each class has an integer value (any integer except 0, which is reserved for unclassified cells; negative values are allowed), a name, a color as red, green and blue, and an opacity from 0 to 100 percent. The value, name and color travel with every output raster the system produces, in its attribute table and color map, and the opacity lets a hillshade beneath the map show through the classes you choose.

Each class is defined by its criteria, one per input raster it depends on. A criterion names the input (TPI, small-neighborhood TPI, large-neighborhood TPI, slope, or the general raster), the units the threshold is expressed in, an operator and a value, and optionally a second operator and value joined to the first by and or or, which is how a range such as −1 < TPI < 1 is written. The units depend on the kind of input:

Input kindUnits offeredMeaning
TPI (any of the three roles) raw, standardized, sd, pctl The DEM's elevation units (raw); a TPI standardized over the whole raster (standardized); standard deviations of elevation within the neighborhood (sd); or the percentile of the cell within its neighborhood (pctl). The Topographic Position Index tool produces the raw, neighborhood-SD and percentile forms; standardized is kept for systems written against a whole-raster z-score of TPI made elsewhere, and the classification tools treat it and sd as the same kind, standard-deviation units, without converting any values.
Slope Degrees, Percent The slope raster's units. The first slope criterion in a system also sets the system's slope units.
General raster Cell Values, Standardized (z-score) The raster's own values, or its whole-raster z-score.

A cell falls into a class when every one of that class's criteria holds. Where two classes claim the same cell, the class with the lower value wins, so the values set precedence as well as identity. A system does not have to cover every possible combination of values; cells that match no class are written as unclassified.

The threshold values themselves can be found by trial with the TPI Neighborhood Sampler, which draws any threshold as a line over a snapshot of the DEM in raw or neighborhood standard deviation units, the raw and sd units of a criterion here.

A tour of the window

The Classification System Builder window: on the left the list of saved classification systems with Weiss 6-Class Slope Position selected and New, Duplicate and Delete buttons beneath; on the right its name, family slope_position, description, slope units Degrees, the Classes grid with six classes from Valley to Ridge and their R, G, B, Opacity % and color swatches, Upper Slope selected, and the Criteria grid for Upper Slope: tpi, sd, greater than or equal to 0.5, and, less than or equal to 1; Valid inputs: tpi, slope, with Save and Close at the bottom right
The Builder with the bundled Weiss 6-Class Slope Position system loaded and its Upper Slope class selected. This class has one criterion, on TPI alone, written as a range with two conditions: at least 0.5 and at most 1 neighborhood standard deviations.

The window has two halves. On the left is the list of saved classification systems, every system in the per-user store, with two rows of buttons beneath it. New starts an empty system, Duplicate copies the selected one under a new name, which is the usual way to begin a variant of a bundled system, and Delete removes the selected one. A deleted bundled system does not stay gone: the bundled copies are restored whenever the list refreshes, so it reappears at once in its original form, which is also the way to undo edits to a bundled system. Import… and Export… move systems between users, as described under Sharing systems with colleagues. Clicking a system loads it into the editor on the right.

The Topographic Analysis Tools gallery open on the ribbon, with the Classification System Builder button, in the TPI Tools row, outlined in blue
Where to find it: Classification System Builder is in the TPI Tools row of the Topographic Analysis Tools gallery, in the Topographic Analysis group of the Wildlife and Forestry tab.

Several systems can be selected at once, with Ctrl+click or Shift+click. The editor then goes blank, since there is nothing to edit, and Duplicate, Export and Delete act on the whole selection: Duplicate writes a saved copy of each, named “name (copy)” (with a single system selected, the copy stays unsaved in the editor until you click Save, so you can rename it first); Export writes all of them to one file; and Delete asks once, listing every name.

The right half starts with the system's Name, Family, Description, which can run to several lines, and Slope units, with the note that they are "assumed by this system's slope thresholds; only used to warn about mismatched slope rasters." The slope-units box is disabled for the general family, which has no slope input.

Below those is the Classes grid, one row per class, with columns for Value, Class name, R, G, B, Opacity % and Color. The Color cell is Esri's own color picker, and the R, G, B and Opacity % cells update to match whatever it picks, as described below. The numeric cells accept only digits, and Value accepts a leading minus sign. Add class and Remove class sit just above the grid, at its right.

Two ways to set a color and its transparency

A class's color and transparency can be typed or picked. The quickest way is to type numbers into the grid: R, G and B for the color, and a percentage in Opacity %, where 100 is solid and lower values let whatever lies beneath the output show through. The other way uses Esri's standard color tools, the same ones used throughout ArcGIS Pro: click the class's Color swatch to open the ArcGIS palette, or choose Color properties… at the bottom of the palette to open the Color Editor, with its sliders, color modes and Transparency setting. Either way, the grid and the swatch stay in step.

The Classification System Builder with class 1 of the Ground-Based Equipment Operability (Percent Slope) system at 40 in the Opacity % column, circled and highlighted in yellow, and its Color swatch checkered
Typed: 40 in the Opacity % cell.
The same Builder window with callouts: clicking class 1's Color swatch opens the ArcGIS color palette; Color properties at the bottom of the palette opens the Color Editor, where Transparency is set to 60 percent and the Current swatch shows checkered
Picked: the Color swatch, then Color properties…, then Transparency in the Color Editor.

The two describe the same setting from opposite sides: the grid stores opacity and Esri's editor shows transparency, so 40 in the Opacity % column appears as 60 percent transparency in the editor. Once the output is on the map, the same Color Editor is also available from the layer's Symbology pane, for adjusting one map without changing the system.

The same Builder window with the Flat Slope class selected; the Criteria grid has two rows: tpi, sd, greater than -0.5, and, less than 0.5; and slope, Degrees, less than or equal to 5
The Weiss 6-Class Slope Position system from the first figure in this section, now with Flat Slope selected. This class has two criteria, one row for each input: TPI between −0.5 and 0.5 standard deviations, and slope of no more than 5°. A cell must meet both. Compare Upper Slope in that first figure, which needs only one.

Selecting a class fills the Criteria grid below it, one row per criterion, with columns for Input, Units, Op, Value, And/Or, Op 2 and Value 2. The Input dropdown lists all five roles (tpi, tpi_small, tpi_large, slope and raster) whatever the family; a role the system's family does not declare is rejected when you save. The Units dropdown refills to match the chosen input. Leave And/Or blank for a single-condition criterion, or choose and or or and fill in the second operator and value for a range. Add criterion and Remove criterion sit just above this grid, at its right, and a note below it lists the valid inputs for the system's family (for a slope-position system, tpi, slope).

Save writes the system to the store, and Close closes the window; the blue ? beside them opens this page. Edits live only in the editor until you click Save, so if you click another system, start a new one, import, or close the window while a system has unsaved changes, the Builder asks before discarding them. Saving is where the Builder checks your work.

What Save checks

Before a system is written, the Builder runs two kinds of checks. The first is structural, and it stops the save with a message if the system cannot be applied at all: a class with value 0 (reserved for unclassified and NoData cells), a class value used twice, a system or class without a name, a class with no criterion, an input the system's family does not declare, a color outside 0 to 255, an opacity outside 0 to 100, units that the criterion's input does not offer, or a second condition whose join is neither and nor or.

The second is a range check that does not stop the save but asks before it proceeds. The Builder works out, for each input, the set of values that at least one class covers, and it reports:

The Builder with a copy of the Corridor Designer 4-Class Topographic Position system, renamed with the note has gaps, in which the Canyon bottom class ends at -15 instead of -12; over it, a Classification System Builder dialog with a warning icon: Checking the class ranges found: Input 'tpi': values from -15 (exclusive) to -12 (inclusive) covered by NO class, those cells will be left Unclassified in the output. Save anyway? with Yes and No buttons
The range check catching a gap. In this copy of the Corridor Designer 4-class system, the canyon-bottom threshold was moved from −12 to −15 m while the flat-gentle and steep classes still start at −12, so TPI values between the two belong to no class. The dialog says exactly which values are uncovered and what would happen to them, and saves only on Yes.

The findings are listed in a dialog that ends with "Save anyway?", and the system is saved only on Yes. Sometimes a gap is intended: a system that classifies only ridges and canyons, leaving everything between unclassified, is a legitimate choice.

One more prompt appears if you rename a system that was loaded from a file. The Builder asks whether to save the edited copy as a new system, keeping the original unchanged, or to overwrite the original under the new name, or to cancel. This protects the bundled systems from being edited away by accident.

Where the systems live

Systems are JSON files in the per-user folder %LOCALAPPDATA%\JennessEnterprises\WildlifeTools\classification_systems\, one file per system. The folder is outside the add-in's own installation, so uninstalling or upgrading the add-in leaves your systems where they are. Whenever the Builder lists the systems or one of the classification tools opens, any of the ten bundled systems missing from the folder is copied in; a bundled file that is already there is never overwritten, so edits to a bundled system survive, and deleting one restores the original.

The ten bundled systems
FamilySystemInputs and thresholds
Slope positionWeiss 6-Class Slope Position TPI in neighborhood standard deviations at −1, −0.5, 0.5 and 1, and slope at 5° to split flat from middle slope (adapted from Weiss 2001).
Slope positionWeiss 6-Class Slope Position, using Raw TPI values The same six classes with raw thresholds of ±5 and ±20 elevation units, to be adjusted to the DEM.
Slope positionWeiss 6-Class Slope Position, using Percentile TPI values The same six classes with percentile breaks at 10, 45, 55 and 90.
Slope positionDickson & Beier 4-Class Slope Position Raw TPI at ±8 elevation units and a 6° slope split, after the cougar-movement study of Dickson and Beier (2007): ridgeline, steep slope, gentle slope, canyon bottom.
Slope positionCorridor Designer 4-Class Topographic Position Raw TPI at ±12 elevation units and a 6° slope split: canyon bottom, flat-gentle slope, steep slope, ridgetop, from the CorridorDesigner toolbox tutorial (Majka et al. 2007).
Slope positionLand Facet Corridor Designer 3-Class Topographic Position Raw TPI at ±6 elevation units and no slope criterion: canyons, slopes, ridges, the first-pass partition of the land facet method (Jenness et al. 2013). Built below as the worked example.
LandformWeiss 10-Class Landform Small- and large-neighborhood TPI in neighborhood standard deviations at ±1, and slope at 5° to split plains from open slopes (adapted from Weiss 2001).
GeneralBasic 4-Class (Standardized Bands) Any raster, z-score bands at −1, 0 and 1.
GeneralBasic 7-Class (Standardized Bands) Any raster, z-score bands at −1.5, −0.75, −0.25, 0.25, 0.75 and 1.5.
GeneralGround-Based Equipment Operability (Percent Slope) A percent-slope raster in six raw bands at 20, 30, 40, 50 and 60 percent, from unrestricted ground-based equipment to cable, aerial or hand only (see the General Raster Classification page).

Sharing systems with colleagues

A classification system is a small text file, so sharing one is a matter of getting the file from one computer to another. The Builder's two sharing buttons do the file handling:

The Export classification system dialog, a standard Windows save dialog, with the file name Ground-Based_Equipment_Operability_Percent_Slope.json and the type JSON files (*.json)
Export: a standard save dialog, with the file named after the system.
A Classification System Builder message: Exported 'Ground-Based Equipment Operability (Percent Slope)' to the chosen path. Send that file to a colleague; they add it with the Builder's Import button.
The confirmation, with the path of the file to send.
The Import classification systems dialog: the file holds 1 classification system; a table with an Import checkbox ticked, the name Ground-Based Equipment Operability (Percent Slope), Customized, family general, 6 classes, status Ready; Import and Cancel buttons
Import: the systems found in the file, each with its family, class count and status. This one is Ready; the name-clash choices appear only when a listed name is already in the store.
A Classification System Builder message: Imported 1 system: Ground-Based Equipment Operability (Percent Slope), Customized
The confirmation. The system is in the list at once.

Import accepts a file holding one system, which is what Export writes and what each file in the store contains, and also a JSON array of systems or an object with a "systems" array, so several systems can travel in one file. A system whose file fails validation is listed with the reason; ticking it has no effect, since only valid systems are imported.

Export is not the only way to get your file. Every system is already sitting in your store folder, %LOCALAPPDATA%\JennessEnterprises\WildlifeTools\classification_systems\, as a file named after the system, and that file can be copied and sent as it is; your colleague imports it the same way. It also works to drop a received file straight into that folder, since the Builder and the tools read every JSON file there, though Import is the safer route: it checks the file, resolves name clashes, and never overwrites anything without asking. If you do open a store file to look at it, take care not to change it, as an edited file can leave a system unreadable.

A worked example: three classes for land facets

The Land Facet Corridor Designer tools used a three-class topographic position raster, canyons, slopes and ridges, made from raw TPI with thresholds of −6 and +6 m (Jenness et al. 2013). That system ships with the add-in, and it is small enough to show every step of building a system from nothing. Here is how to build it:

  1. Open the Builder from the TPI Tools menu and click New. Name the system, say Land Facet 3-Class Topographic Position, set the family to slope position, and give it a description that records the neighborhood and DEM units it was designed for.
  2. Click Add class three times and fill in the Classes grid: value 1, Canyons, a blue; value 2, Slopes, a pale green; value 3, Ridges, a red. Pick each color by clicking its swatch.
  3. Select the Canyons row, click Add criterion, and set Input to TPI, Units to raw, Op to ≤ and Value to −6. Leave And/Or blank.
  4. Select the Slopes row, add a criterion on TPI with units raw, Op >, Value −6, And/Or and, Op 2 ≤, Value 2 6.
  5. Select the Ridges row, add a criterion on TPI with units raw, Op >, Value 6.
  6. Click Save. The range check finds no gaps and no overlaps, because the three ranges meet exactly at −6 and 6, and the system is written to the store.

The system now appears in the Slope Position Classification tool's dropdown, beside the bundled copy. To adapt a bundled system rather than start from nothing, select it, click Duplicate, and edit the copy; the copy is saved as a new file of its own, so the original is untouched. Because its thresholds are raw, the dialog will default the TPI type to raw elevation units when it is picked, and the 6 m thresholds mean what they say on any DEM in meters. This system uses no slope criterion, so it can be applied to a TPI raster alone, with no slope raster supplied.

Recommended citation

Jenness, J. 2026. Classification System Builder. 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). The Builder is the successor of the saved criteria sets of his Topographic Position Index extension for ArcView 3.x (Jenness 2006), which stored slope-position, landform and general classification criteria in shareable tables so that the methods of Weiss (2001) could be reused and exchanged. The bundled systems are adapted from Weiss (2001) or follow Dickson and Beier (2007), the CorridorDesigner toolbox of Majka, Jenness and Beier (2007), and the Land Facet Corridor Designer of Jenness, Brost and Beier (2013).

Licensing information

Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required.