Issue 009 · October 7, 2026

A 300-metre snap and a 17 percent error: what automated watershed delineation gets wrong

Click a point on a stream, wait a few seconds, and a drainage area comes back. The terrain part of that has gotten very good. I checked it against three USGS gauges in North Carolina and it landed within a few percent every time. The largest error I found came from a single setting most people never look at: how far the tool is allowed to move your outlet.

TL;DR. Terrain delineation from USGS 3DEP elevation data matched published USGS drainage areas within −0.8% to +2.4% at three NC gauges, from 2.6 to 49 mi². The biggest error had nothing to do with the terrain. It came from the pour-point snap distance: at 300 m, Cataloochee Creek's outlet jumped past the Little Cataloochee confluence and the area came out 17.2% high. Anywhere from 0 to 150 m gave −0.2%. Snap tools move the outlet to the cell of greatest flow accumulation within the radius. Near a confluence, the greatest accumulation is downstream of it, on the combined stream.

The setup

The elevation data is the USGS 3DEP 1/3-arc-second DEM, pulled from the National Map's image service in an equal-area projection (EPSG:5070). From there it is the standard chain: breach the depressions by least cost and fill whatever is left, compute D8 flow directions, accumulate flow, snap the pour point to the stream, trace the watershed, and turn it into a polygon. The area is a shoelace sum in the same equal-area projection, so there is no projection stretch in the number.

All of it runs in a web browser. The terrain tools are the Whitebox Next Gen tools compiled to WebAssembly (geolibre-wasm, MIT licensed). Nothing goes to a server except the DEM request. Each gauge took under 10 seconds end to end, and most of that was downloading the DEM.

The check is simple: pick gauges with published drainage areas, click the gauge location, and compare.

Three gauges

USGS gaugePublished, mi²Delineated, mi²Diff.
02146470 Little Hope Cr at Seneca Place, Charlotte
10 m cells, 12 km window
2.632.61−0.8%
02146409 Little Sugar Cr at Medical Center Dr, Charlotte
15 m cells, 24 km window
11.8012.09+2.4%
03460000 Cataloochee Cr near Cataloochee
20 m cells, 40 km window
49.2049.12−0.2%

Cell size goes up with the basin so the window stays a manageable size. The window has to hold the whole watershed with room to spare. If the basin runs off the edge of the DEM, the area is simply truncated, and nothing warns you.

Two urban basins in Charlotte and a steep mountain basin in the Smokies, all within a few percent. That is the encouraging half.

The snap story

You never click exactly on the cell the DEM thinks the stream runs through. A gauge's published latitude and longitude, a culvert you picked off an aerial, a point you clicked at a comfortable zoom: they are all a few cells off the modeled channel. So every delineation tool snaps the point first. The rule is almost always the same. Search a radius around the click, and move the outlet to the cell with the largest flow accumulation.

To see how much that setting matters, I ran Cataloochee Creek again at several snap distances. This series was a separate run on a 20 m grid in UTM zone 17N, from the same 3DEP source:

Snap distanceDelineated, mi²vs. published 49.20 mi²
0 m49.12−0.2%
40 m49.12−0.2%
80 m49.12−0.2%
150 m49.12−0.2%
300 m57.66+17.2%

Nothing from 0 to 150 m. Then 8.5 square miles appear at 300 m. The gauge sits just upstream of where Little Cataloochee Creek comes in. Inside a 300 m radius, the cell with the most flow accumulation is no longer on Cataloochee Creek at all. It is on the combined stream below the confluence, which carries both creeks. The tool did exactly what it was told. It found the biggest number in the circle, and the biggest number belonged to a different watershed.

Two maps of Cataloochee Creek. Left: the 49.12 square-mile watershed above the outlet snapped at 150 metres in blue, and the extra Little Cataloochee Creek area added by a 300 metre snap in orange. Right: a 1.4 km close-up of the gauge, with 150 and 300 metre snap circles; the 150 metre outlet stays on Cataloochee Creek just above the confluence, and the 300 metre outlet sits on the combined stream below it.
Cataloochee Creek, rendered from the run in the table above. Blue: watershed above the outlet snapped at 150 m (0, 40 and 80 m give the same area). Orange: what a 300 m snap adds, after the outlet moves onto the stream below the Little Cataloochee confluence.

This is not a Cataloochee quirk. Gauges, culverts and road crossings often sit a short distance above a confluence. Every one of those is a place where a generous snap radius will hand you the wrong watershed. And the result does not look wrong. The polygon is clean, the boundary follows the ridges, and the area is only 17% bigger, which is well within what you might believe for an unfamiliar basin.

Why the urban basins matched, and why you should not count on it

Little Sugar Creek drains a good piece of central Charlotte, and it came out 2.4% high. I would not read that as proof that terrain delineation works in cities. The DEM sees streets, curbs and swales. It does not see a 48-inch pipe that carries a neighborhood under a ridge into the next basin. At 11.8 mi², a few of those crossings wash out.

For site-scale work, under about 50 acres, a 3DEP delineation is a starting sketch. The real boundary comes from survey or lidar plus the storm drain plans, and an engineer who has looked at both.

A tooling note for the curious

While building this I hit a quieter version of the same problem. A widely used open-source D8 accumulation tool, when fed a 16-bit flow-direction grid, writes its output in that same 16-bit type, so accumulation caps at 32,767 cells:

$$32{,}767 \times (10\ \text{m})^2 \approx 3.3\ \text{km}^2$$

Past about 3.3 km² at 10 m cells, every cell on a big stream reads the same number. On a 30 m test grid, 238 cells sat at exactly 32,767 while the true maximum was 93,573. A snap that looks for the largest value in its radius now finds a tie instead of one main-channel cell, and where the outlet lands is down to the tool's tie-breaking. The workaround is to accumulate from the DEM itself rather than from the pointer grid. I have reported it upstream. The general lesson is older than this tool: when a grid of counts has a suspiciously round maximum, check the data type before you check the hydrology.

Practical rules

Where this lives now

HydroComplete's watershed inspector has a Delineate from Map button that runs this pipeline in your browser. Click the outlet, look at the polygon and the snapped point, and the area goes into the node. Because it is a screening number, the report marks the area [3DEP screening, unverified] until you replace it with one you have checked. That tag is deliberate. A drainage area that came from a click should say so on the page the reviewer reads.

Delineate a drainage area, then check it

Delineate from Map pulls 3DEP terrain, traces the watershed in your browser, and puts the area into your hydrology with its source on the report. Every formula downstream of it is on the page, with the numbers that went into it.

— Michael Flynn, PE
Next issue: back to the pond outlet for its third personality — when the riser barrel itself becomes the control, and how to tell weir, orifice, and pipe control apart from the stage-discharge curve alone.

More from the Hydraulic Notebook

← Previous Issue 008 — Where the flood water goes: keeping the books between a pipe network and the street

← Issue 002 Kirpich vs NRCS: when time of concentration disagrees by a factor of two

← Issue 001 The runoff coefficient C is the dirtiest number in stormwater

Use the area: Composite curve number calculator on pe-calc · Rational method calculator

Browse the full archive →

Get next issue in your inbox

One issue per month. Real design problems, real math. Free, unsubscribe in one click.

Free. Unsubscribe anytime. Privacy.