General Raster Classification

Topographic Analysis · TPI Tools · geoprocessing tool · by Jeff Jenness
Works at every ArcGIS Pro license level

Summary

Classifies any single-band raster into named, colored categories using a saved general classification system: a set of threshold rules on the raster's own values, or on its whole-raster standardized (z-score) values. It is the general-purpose sibling of the Slope Position Classification and Landform Classification tools: the same reusable classification systems and the same per-user store, applied to an arbitrary raster rather than to a DEM. Elevation, a slope raster, a wetness index, a habitat-suitability surface, a model output: anything with one band can be classified. The output is an integer raster with a Value and Class_Name attribute table and the system's color map, so it draws as named classes the moment it is added to the map. No Spatial Analyst or 3D Analyst extension is required.

Learn more About TPI introduces the whole family of tools this one belongs to, and the Classification System Builder page shows how the classification systems this tool applies are made.

If you know Esri's Reclassify tool

This tool serves a similar purpose to Esri's standard Reclassify tool: it turns a continuous raster into integer classes, so much of what you expect from Reclassify applies here. The differences are these:

  1. The classification scheme is not typed into the tool dialog each time. It is created once, as a reusable named system, in the standalone Classification System Builder, and then simply picked from a dropdown here.
  2. Each output class stores a name, and a display color, with the raster's attribute table, so the result draws and reads as named, colored categories rather than bare integers.
  3. No additional extension is required. Esri's Reclassify needs a Spatial Analyst or 3D Analyst license; this tool runs on any ArcGIS Pro license.
  4. Classes can be defined in standardized units as well as in the raster's own values: thresholds in standard deviations from the mean of the whole raster, so that “more than one standard deviation above average” can be a class without first working out what value that is. Reclassify works only in the raster's own values.

The tool is the direct descendant of the General Grid Classification function in the Topographic Position Index extension for ArcView 3.x (Jenness 2006). It is renamed here because grid was the raster format of the ArcView and ArcInfo era, and the word means little to newer users.

How a class is defined

A general classification system holds one or more classes, each with a value, a name, a color, and one criterion on the input raster. The criterion is a threshold condition, such as value > 1, or a range made of two conditions joined by and or or, such as value > −1 and value ≤ 0. A cell takes a class when its criterion holds: the single condition, or the two conditions combined by the and or or chosen. Where two classes overlap, the class with the lower value wins, so class values also set precedence. A cell that matches no class, or that is NoData in the input, is written as unclassified: value 0, which the output treats as NoData.

The thresholds may be read in either of two ways, and the system records which. Raw thresholds are compared with the raster's own values, in its own units, so they are absolute: a threshold of 30 on a percent-slope raster means 30 percent wherever it occurs. Standardized thresholds are compared with the whole-raster z-score of each cell,

z= value−mean standard deviation

where the mean and standard deviation are those of every valid cell in the input raster. A standardized threshold of 1 therefore means one standard deviation above the raster's mean, whatever the raster's units and range. Standardized thresholds adapt to the raster's own distribution, which is useful when the value range is not known in advance, or when the same system is to be applied to rasters with different ranges; raw thresholds are the choice when the numbers themselves carry meaning. Classification is a single vectorized pass in numpy over the whole raster, with no Esri Con and no Spatial Analyst.

The three bundled templates

Three general systems ship with the add-in. Two use standardized bands and are meant as generic starting points; the third, a forestry slope classification in raw percent, is described in the worked example below. Open any of them in the Classification System Builder, duplicate it, and edit the thresholds, units, names and colors for your own data.

Basic 4-Class (Standardized Bands)
ValueClass nameCriterion (standardized)Color
1Lowz ≤ −1 44, 123, 182
2Below Average−1 < z ≤ 0 171, 217, 233
3Above Average0 < z ≤ 1 253, 174, 97
4Highz > 1 215, 25, 28
Basic 7-Class (Standardized Bands)
ValueClass nameCriterion (standardized)Color
1Very Lowz ≤ −1.5 69, 117, 180
2Low−1.5 < z ≤ −0.75 145, 191, 219
3Below Average−0.75 < z ≤ −0.25 224, 243, 248
4Average−0.25 < z ≤ 0.25 255, 255, 191
5Above Average0.25 < z ≤ 0.75 254, 224, 144
6High0.75 < z ≤ 1.5 252, 141, 89
7Very Highz > 1.5 215, 48, 39

Every general system you create or edit in the Builder appears in this tool's dropdown alongside these three. Systems are stored as JSON files in a per-user folder that survives add-in reinstalls, and a system can be shared with a colleague by copying its file.

A worked example: slope classes for forest operations

The two standardized templates suit any raster whose range you do not know in advance. Raw thresholds are the other half of the tool, and a slope raster is the clearest case for them. A forester does not want “one standard deviation above the average slope on this particular DEM,” a value that moves every time the analysis extent changes; a forester wants the slope at which a rubber-tired skidder stops being an option. Those numbers are fixed, they are published, and they mean the same thing on every map.

The third bundled system, Ground-Based Equipment Operability (Percent Slope), classifies a percent-slope raster into six bands of ground-based equipment operability. Each break is a value that appears in published Forest Service or state direction, cited at the end of this section. Because the thresholds are raw, the system applies unchanged to every project area.

Ground-Based Equipment Operability (Percent Slope)
ValueClass nameCriterion (raw, percent)What it means on the groundColor
1Unrestricted Ground-Based value ≤ 20 Conventional ground-based equipment is permitted on slopes of less than 20 percent even where soil survey data are unavailable (GMUG forest plan). 69, 117, 180
2Ground-Based, Wheeled Limit 20 < value ≤ 30 The Oregon OSHA limit for rubber-tired skidders, and the general limit for ground-based mechanized vegetation treatment in the Lake Tahoe Basin Management Unit plan. 145, 191, 219
3Tracked Equipment Only 30 < value ≤ 40 The Oregon OSHA limit for crawler tractors, tracked feller bunchers, tracked excavators and loaders; also the GMUG plan's limit for conventional equipment where soil data are available. 224, 243, 248
4Steep-Slope Equipment 40 < value ≤ 50 The Oregon OSHA limit for forestry equipment designed for steep slopes. In the SBEADMR analysis, mechanical treatment above 40 percent was limited to chainsaws. 254, 224, 144
5Tethered or High-Flotation 50 < value ≤ 60 High-flotation equipment to 60 percent (GMUG plan); cut-to-length systems travelling on a slash mat to 60 percent (SBEADMR). 252, 141, 89
6Cable, Aerial or Hand Only value > 60 Beyond the documented ground-based limits. Cable and aerial systems may be used on any slope (GMUG plan); otherwise hand treatment or prescribed fire. 215, 48, 39
Percent or degrees?

These thresholds are in percent slope, the unit forest operations direction is written in. A slope raster in degrees needs a second classification system built with the equivalent breaks: 20 percent = 11.3°, 30 = 16.7°, 40 = 21.8°, 50 = 26.6°, 60 = 31.0°. Raw thresholds are compared with the raster's own values, so the tool cannot detect a unit mismatch: a degree raster run against this system puts far too much ground in the gentle classes, because every slope is a smaller number in degrees than in percent. Naming the slope raster for its units is the simplest guard against it.

Obviously, getting the units right matters in general, not just for slope: classifying a DEM in feet against elevation thresholds written in meters causes exactly the same kind of problem.

Because every class carries its own color and opacity, the output drawn over a hillshade is a finished operability map with no symbolization step. Setting class 1 to partial opacity in the Classification System Builder lets the gentle ground read as terrain while the constrained classes stay solid.

The Classification System Builder with Ground-Based Equipment Operability (Percent Slope) selected, six classes with their colors, class 1 Unrestricted Ground-Based with 40 typed in the Opacity % column, circled and highlighted in yellow, and its Color swatch checkered, the other five at 100, and the criterion for class 1: raster, Cell Values, less than or equal to 20
Class 1 set to 40 percent opacity by typing 40 in its Opacity % cell; the color swatch turns checkered to show it. The same setting can be made with Esri's color tools, as the Classification System Builder page shows.

The same Color Editor is available after the output is on the map. The classified raster is an ordinary layer, so any class's color and transparency can be changed from the layer's Symbology pane in the same way, without touching the classification system: useful for adjusting one map without changing the defaults every future run will use.

import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt")  # your install path

# The input must be a PERCENT-slope raster; see the note on units above.
arcpy.jenness.GeneralRasterClassification(
    in_raster=r"D:\Project.gdb\Percent_Slope",
    out_raster=r"D:\Project.gdb\Slope_Operability_Classes",
    system="Ground-Based Equipment Operability (Percent Slope)")
These are starting points, not a national standard Slope limits for forest operations come from several layers of direction with different numbers and different authority: forest plan standards and guidelines, project decisions, soil and water best management practices, and worker-safety rules. The breaks above are values that recur across those sources and make a defensible default, but the operative threshold for a particular unit comes from that forest's plan and that project's decision document; duplicate the system in the Builder and edit the thresholds to match. Mapped slope also depends on the DEM: a finer DEM resolves short steep pitches that a coarser one averages away, so it puts more cells above any threshold. Generalizing the slope raster before classifying it, or applying a minimum mapping unit afterwards, gives a result closer to how ground is actually treated.

Sources for the thresholds

A tour of the dialog

The example classifies percent slope on the Coconino National Forest around the San Francisco Peaks, north of Flagstaff, with the Ground-Based Equipment Operability (Percent Slope) system described above, its first class set to partial opacity.

The Topographic Analysis Tools gallery open on the ribbon, with the General Raster Classification button, in the TPI Tools row, outlined in blue
Where to find it: General Raster Classification is in the TPI Tools row of the Topographic Analysis Tools gallery, in the Topographic Analysis group of the Wildlife and Forestry tab.
The General Raster Classification pane: input raster Coconino_Percent_Slope, output classified raster Coconino_Percent_Slope_Classified, classification system Ground-Based Equipment Operability (Percent Slope)
The pane: a raster, an output name and a system.

The dialog asks for three things: the raster to classify, a name for the output, and the classification system to apply. The system list is read from the per-user store each time the dialog opens, so a system saved in the Builder a moment ago is already there. The output name is suggested from the input.

Percent slope around the San Francisco Peaks on the Coconino National Forest in nine color classes from dark purple (0 percent) through green to yellow (39 to 413 percent), with the steep flanks of the peaks and the cinder cones to the east in yellow; blue and red points mark peaks and low points; a 5 kilometer scale bar
The input: percent slope on the Coconino National Forest, the San Francisco Peaks in the center and cinder cones to the east. The points are the peaks and low points from the Find Raster Extreme Values page.
The six-class operability raster over a hillshade: the gentle ground around the peaks in translucent blue with the hillshade showing through, wheeled-limit and tracked-equipment ground in lighter blues along the lower slopes, and steep-slope, tethered and cable-aerial-or-hand-only ground in yellow, orange and red on the flanks of the San Francisco Peaks and the cinder cones; a legend of the six class names and a 5 kilometer scale bar
The output. The upper flanks of the Peaks and the steep sides of the cinder cones are beyond ground-based limits (red) or need tethered, high-flotation or steep-slope equipment (orange and yellow); the lower slopes are wheeled- or tracked-equipment ground. Class 1, set to 40 percent opacity, lets the hillshade show through across the gentle country.

The output carries its classes with it. Its attribute table has a Value and a Class_Name field, one row per class that occurs, and its color map holds the system's colors, including any per-class opacity set in the Builder, so a hillshade beneath can show through selected classes. Added to a map, it draws as named, colored categories with no symbolization step.

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: Coconino_Percent_Slope feeding General Raster Classification, producing Coconino_Percent_Slope_Classified
One raster in; the classified raster out.

Parameters

LabelExplanationData type
Input raster (single band)Required · in_raster Any single-band raster to classify. Its values are read as they are for raw thresholds, or standardized over the whole raster for standardized thresholds, as the chosen classification system specifies. Raster Layer; Raster Dataset
Output classified rasterRequired · out_raster The output integer class raster, carrying a Value and Class_Name attribute table and a color map from the classification system, including any per-class opacity. Cells matching no class, or outside the data, are unclassified. A name is suggested from the input. Raster Dataset
Classification systemRequired · system The saved general classification system to apply: its thresholds, names and colors. This plays the role of the remap table you would type into Esri's Reclassify tool, except that it is created once in the Classification System Builder and reused, and it carries a name and color for each class. The list is read from the per-user store; the bundled defaults are the Basic 4-Class and Basic 7-Class standardized-band templates and the Ground-Based Equipment Operability (Percent Slope) system. String

Python

The system is named exactly as it appears in the Builder. Any general system you have created is valid; the comment block lists only the bundled ones. The names of the systems on your computer are listed in the Classification System Builder; they are also the "name" entries of the JSON files in %LOCALAPPDATA%\JennessEnterprises\WildlifeTools\classification_systems\, but if you look them up there, take care not to change anything: an edited file can leave a system unreadable.

import arcpy
arcpy.ImportToolbox(r"C:\path\to\JennessEnterprisesTools.pyt")  # your install path

# ---- valid options for the list-driven parameter -------------------------
# system (bundled; user-created systems from the Classification System
#         Builder are also valid -- this list is not exhaustive):
#                      "Basic 4-Class (Standardized Bands)"
#                      "Basic 7-Class (Standardized Bands)"
#                      "Ground-Based Equipment Operability (Percent Slope)"

arcpy.jenness.GeneralRasterClassification(
    in_raster=r"D:\Flagstaff.gdb\Flagstaff_Percent_Slope",
    out_raster=r"D:\Flagstaff.gdb\Slope_7_Classes",
    system="Basic 7-Class (Standardized Bands)")

Recommended citation

Jenness, J. 2026. General Raster Classification. 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), modernizing the General Grid Classification function of his Topographic Position Index extension for ArcView 3.x, which automated the classification methods of Weiss (2001).

Licensing information

Works at every ArcGIS Pro license level (Basic, Standard, Advanced). No extension licenses are required; the classification is computed internally, without Spatial Analyst or 3D Analyst.