// fundamentals

What a curve number actually is

The basics, for context, before the three methods below.

In the SCS CN method, the curve number is a single dimensionless parameter, between 30 and 100, used to estimate direct runoff from a rainfall event in a given watershed. It rolls land cover, hydrologic soil group, hydrologic condition, and antecedent moisture into one number. Higher CN means less water infiltrates, so more becomes runoff.

Each combination of land cover and soil hydrologic group maps to a specific CN through empirical tables. With CN known for every cell of the watershed, runoff volume from a given storm follows directly. The method is widely used in stormwater design, flood studies, and watershed modeling because the inputs are easy to come by and the math is well understood. It is intentionally simple, which means the limits matter: it does not replace fully distributed runoff models in complex hydrologic settings, and it is best used within its intended scope.

// three approaches

Three ways to build the CN raster

Same destination, different tradeoffs. Pick by data, time, and the tools you already have.

  1. 01

    ArcGIS Pro built-in tools

    If you already work in ArcGIS Pro, this gets you to a CN map without installing anything extra.

  2. 02

    ArcHydro tools in ArcGIS Pro

    The fullest workflow: delineate the watershed, derive flow direction and accumulation, and produce the CN raster, all in one extension.

  3. 03

    SCS Curve Number Generator (web app)

    A Python web app I built that returns CN values for any watershed in seconds, no desktop GIS required.

// method 01

ArcGIS Pro built-in tools

A walk-through that uses only the tools that ship with ArcGIS Pro. CN values come from the standard land use / hydrologic soil group tables, applied through the built-in raster and zonal operations.

For the source data, see the soil and land use videos in the resources section below.

// method 02

ArcHydro tools in ArcGIS Pro

ArcHydro is Esri's free hydrology toolset for ArcGIS. It packages watershed delineation and the CN workflow into one extension. The conceptual sketch below shows how soil, land use, and the basemap come together into the final CN raster.

Three layers (satellite imagery, land use polygons, and soil polygons) combine into a single Curve Number raster
Soil + land use + topography combine, cell by cell, into one CN raster.

Data and software you'll need

A digital elevation model (DEM)

A high-resolution DEM of the study area, for deriving flow direction and accumulation and for delineating the watershed.

Land use and land cover (LULC)

Land cover classes for the study area, used to assign hydrologic groups and the corresponding curve numbers.

Soil data

Soil types and properties for the study area. Different soils infiltrate at different rates, which is what drives the CN assignment.

GIS software

A GIS package such as ArcGIS Pro or QGIS to process and analyze the spatial data, run the calculations, and make the maps.

Where to get the data and the tools (United States)

The procedure, step by step

  1. 01

    Create a histogram of hydrologic soil groups (HSGs) and replace any missing HSG with the most frequent value.

  2. 02

    Convert dual classes A/D, B/D, and C/D to D.

  3. 03

    Convert the land use raster to a feature class (a shapefile).

  4. 04

    Add four columns to the soil table: PctA, PctB, PctC, and PctD.

  5. 05

    Use the Union tool to combine the soil and land use shapefiles into one connected layer.

  6. 06

    Remove records with FID = -1.

  7. 07

    Add a new column named LandUse and set it equal to Gridcode.

  8. 08

    Create a CN Lookup Table that maps each combination of land use and HSG to a curve number.

  9. 09

    Generate the CN raster using ArcHydro Tools.

  10. 10

    Inspect the result, then review the distribution and check it against what you know about the area.

Watch the full walk-through

Download the ArcGIS Pro Package So you can follow along with the same data.
An example Curve Number raster with high CN values shown in red, low values in blue or green
An example CN raster output for a small watershed. Red cells are impervious or near-impervious; greens and blues are vegetated or open water.
// method 03

SCS Curve Number Generator (web app)

A code-first alternative if you would rather work in Python than click through ArcGIS Pro. Provide your soil and land-use vector files (and optionally a watershed boundary), and the app builds the CN map and the statistics that go with it. Runs locally in the browser.

CN_Generator

Open-source Python web app built around the standard NRCS Curve Number methodology and the USACE HEC-HMS guidance for spatial CN assignment. Drop in your soil and land-use layers, choose a lookup table, and the app handles CRS alignment, dual-group resolution, the spatial overlay, raster export, and zonal statistics. The whole thing runs locally; nothing is uploaded to a remote service.

Python 3.11+Gradioruns in the browserfree, open source
View on GitHub

01 What it does

  • Aligns coordinate systems automatically across the soil and land-use layers, so you do not have to reproject anything by hand.
  • Resolves dual hydrologic groups (A/D, B/D, C/D) into the more restrictive group, the standard convention.
  • Spatially intersects soil and land use and assigns a Curve Number to every polygon from a built-in NLCD lookup table (or your own CSV).
  • Computes zonal statistics per watershed when a boundary is provided: area-weighted CN, mean, min, max, and counts.
  • Builds an interactive Folium map with tooltips and a runoff-potential legend so you can sanity-check the result in the browser.
  • Exports clean files: a GeoPackage of CN polygons, a GeoTIFF raster ready for HEC-HMS or HEC-RAS, an HTML report, and an optional Excel summary.

02 What it expects

  • Soil vector with a hydrologic soil group field
  • Land-use vector with a numeric class code field
  • Watershed boundary (optional, for zonal statistics)
  • Formats: zip-compressed Shapefile, GeoPackage, or GeoJSON
  • Custom CSV lookup (optional, otherwise uses the built-in NLCD table)

03 What it returns

  • GeoPackage of CN polygons
  • GeoTIFF raster, the CN map ready for any downstream model
  • HTML report with overall statistics
  • Interactive Folium map with legend and tooltips
  • Excel summary of watershed-level stats (optional)

04 Built with

Python 3.11+ and a small set of well-tested geospatial libraries. The pinned versions live in requirements.txt; the table below highlights the ones doing the real work.

Gradiobrowser UI, the form handling, and the local dev server
GeoPandasspatial vector dataframes, joins, and overlays
Shapely + pyogrio + Fionageometry operations and vector file I/O
Rasterio + rioxarraywriting the GeoTIFF output raster
rasterstatszonal statistics per watershed
Folium + leafmapthe interactive Leaflet map in the browser
pandas + NumPytables, arrays, the lookup table merge
dask + dask-geopandasparallel processing for larger study areas
WhiteboxToolsauxiliary geospatial operations

05 Run it locally

git clone https://github.com/mohsennasab/CN_Generator.git
cd CN_Generator
python -m venv .venv
.venv\Scripts\activate           # on Windows
# source .venv/bin/activate      # on macOS or Linux
pip install -r requirements.txt
python app.py

Gradio opens in your default browser at http://127.0.0.1:7860. Drop in the soil, land-use, and (optionally) watershed files, set the lookup table, and the CN map is generated in seconds.

Open the repository on GitHub Stars and contributions welcome.
// other useful resources

Supporting workflows

Source data, the theory behind the curve number, and the related pieces of a hydrologic study (rainfall, unit hydrographs).

01

Download and process soil data for your watershed

How to download and pre-process SSURGO soil-texture data for hydrologic and watershed modeling. Soil characteristics drive infiltration and runoff, so getting them right early pays off later.

02

Download and process land use and land cover data for your watershed

A step-by-step walk-through of getting and preparing NLCD land use and land cover data for hydrologic and watershed analysis.

03

NRCS Curve Number method: the theory

The NRCS (formerly SCS) Curve Number method is an empirical approach for predicting rainfall excess and infiltration. The four videos below build the theory; watch in order.

Part 1 of 4
Part 2 of 4
Part 3 of 4
Part 4 of 4
04

Download NOAA Atlas 14 rainfall-frequency estimates from PFDS

How to download NOAA Atlas 14 rainfall-frequency estimates from the Precipitation Frequency Data Server (PFDS) for hydrologic and watershed modeling. Choosing the design storm is one of the first steps in a hydrologic study.

05

Unit Hydrograph theory and application

A two-part series. Part 1 covers the theory and assumptions behind Unit Hydrographs. Part 2 shows how to build and use one in a modeling project.

Part 1 of 2
Part 2 of 2

Questions on a specific step, or a topic for the next video? Email me. Related: Getting Started with HEC-HMS and Where Water Meets Earth.

← Back to all tutorials