I grew up in a place most people have never heard of, at the end of a road most people only drive once, on their way to somewhere else. Groveland sits on Highway 120, the northern gateway to Yosemite โ€” which means most of the people who pass through it are looking past it, at the granite waiting forty-five minutes up the road. My parents were Forest Rangers on the Stanislaus National Forest. I grew up under that canopy, not passing through it.

I don't live there anymore. I live in Washington now. But Tuolumne County is still the place I measure other places against, and it's the place I went looking for the second I had a new tool in my hands.

The Spark

I was listening to the Mapscaping Podcast โ€” an episode called "10 Tools for Telling Stories With Maps," with Ryan Shields, who makes maps for Johnny Harris's YouTube channel. At some point Ryan described pointing Claude at GRASS GIS and running a full hydrology analysis on USGS elevation data, and said it "just plowed through it." I already had QGIS open with the QGIS MCP plugin connected to Claude โ€” I'd been using it for exactly this kind of thing โ€” and I remember the thought arriving almost before the episode ended: let me try this right now, on the place I actually know.

Not a random county. Not a demo watershed. Home.

What Thirty Minutes Gets You

Here's the unglamorous part, told as fast as I can tell it, because the glamour isn't in the steps โ€” it's in what the steps eventually show you.

USGS keeps a 30-meter elevation model of the entire country through its 3D Elevation Program, but the server that hands it out caps you at about four million pixels per request. Tuolumne County didn't fit in one bite, so I pulled it in four tiles, merged them with GDAL, and clipped the result down to the county line โ€” a 5,240-by-2,875-pixel elevation model of home, 57.5 megabytes, sitting on my screen.

Then GRASS GIS took over. r.watershed ran a full drainage-basin delineation โ€” D8 flow direction, a threshold of 5,000 cells, roughly 4.5 square kilometers as the smallest basin worth naming โ€” across all fifteen million cells of that DEM in thirty-one seconds. r.stream.extract followed and pulled out 2,338 features: 1,151 individual stream segments and 1,187 junctions where they meet.

Every one of those 1,151 segments got classified by Strahler order โ€” the standard way hydrologists rank a stream by how many smaller streams feed into it. Order 1 is a headwater trickle with nothing upstream of it; order 6 is a river that's already swallowed everything above it.

OrderCountDescription
1131Headwater creeks, seasonal, High Sierra meadows
2329Small tributaries, named foothill streams
3244Major tributaries with year-round flow
4201Cherry Creek, Clavey River, South Fork Tuolumne
5189Tuolumne River through the canyons above Don Pedro
657Tuolumne mainstem below major confluences
Map: Watershed & Stream Network
Hillshade + Strahler-classified streams โ€” pale headwaters to navy mainstem
โ–ฒ Tuolumne County stream network โ€” QGIS 4.0 + GRASS GIS r.watershed / r.stream.extract, USGS 3DEP 30m DEM. Map export forthcoming.

I colored it on the canvas the way it deserved: pale blue threads up in the granite, deepening step by step into navy by the time it reaches the reservoir. Watching that render โ€” watching the whole county's water figure out where it's going, all at once, on my own screen โ€” was the best thirty seconds of my week.

Then I Kept Going

I could have stopped there. A watershed map of home is already more than I expected to have by lunchtime. But once the stream network existed, the next question wasn't optional, not for someone from there: which of these creeks run through country that's already burned?

CAL FIRE keeps a historical fire-perimeter database โ€” FRAP, 23,334 records statewide going back to 1878. I pulled every major fire over 1,000 acres that had touched Tuolumne County since 1950. Thirty of them. Overlaid against the stream network, they told me something I didn't fully know until the map said it plainly: 24% of Tuolumne County has burned at least once since 1950. Twenty percent of the stream network โ€” 235 of those 1,151 segments โ€” flows through ground that fire has already been over.

Map: 30 Major Fires ยท 1950โ€“2026
FRAP historical perimeters overlaid on Tuolumne County
โ–ฒ Fire history โ€” CAL FIRE FRAP, 30 perimeters > 1,000 acres. Rim Fire (2013, 256,176 acres) dominates. Map export forthcoming.

The Part That Actually Got Me

It's not just that the county burns. It's that the same canyons burn again.

Reburn Cycle ยท Same Canyon, Different Decade

Moccasin1972 ยท 1992 ยท 1999
Parrotts1994 ยท 2000 ยท 2018
Milton1966 ยท 2006 ยท 2011 ยท 2019
Priest1997 ยท 2026

These aren't different fires finding new ground โ€” they're the same drainages, catching again on something close to a generational clock, like the landscape has a memory and a short one. When you grow up near these place names, they're not rows in a database. They're the canyon your dad patrolled, the road you drove to school, the creek you fished. Seeing them line up on a timeline like that โ€” 1972, 1992, 1999 โ€” did something a statewide statistic never could have.

Burned soil doesn't just look bad and grow back. For two to five years it turns hydrophobic โ€” it stops absorbing water at all. Combine that with steep Sierra terrain and no vegetation left to slow anything down, and you get debris flows and flash floods that are frequently worse for a downstream community than the fire itself was. I classified every fire-touched stream segment by years since burn: extreme risk at zero-to-two years, when the soil is still actively repelling water; moderate out to fifteen years, still-recovering ground; historical beyond that, mostly healed but not entirely.

A hundred and sixty segments โ€” 14% of the whole network โ€” are still sitting in that moderate band because of two fires: the 2013 Rim Fire, at 256,176 acres the largest in county history, and the 2018 Donnell Fire. Thirteen years on, and the water still hasn't forgotten either one.

Two segments are sitting in the extreme band right now, for a much smaller, much more recent fire: the TCU 6-5 Fire, which broke out near Chinese Camp in September 2025, burned less than 7,000 acres, and took 95 structures with it anyway.

Map: Post-Fire Flood Risk
235 stream segments ยท classified extreme / moderate / historical
โ–ฒ Post-fire flood risk โ€” 235 of 1,151 stream segments flow through fire-affected drainages. Extreme in red, moderate in orange, historical in yellow. Map export forthcoming.

Then the Universe Interrupted

On July 6th, while I was in the middle of building this, a fire broke out on Old Priest Grade โ€” the steep old highway grade that drops down into Groveland. It stayed small, about fifteen acres, and crews had it out fast. But it was burning the exact corridor I had open on my screen at that exact moment, feeding data into a model built to answer the question of what happens next time a fire hits that ground.

"I don't have a tidy way to explain how that felt. Mostly I just sat there for a second, looking at the map, and then looking at the actual smoke, forty-five minutes from where I grew up."

Why Any of This Should Matter to You

Groveland and Big Oak Flat sit on Highway 120, downstream of drainages that have already burned more than once, including now, technically, this one. Chinese Camp is still inside its two-year hydrophobic window from the TCU fire. Don Pedro Reservoir โ€” the county's main water storage โ€” takes sediment-laden runoff straight off the Rim Fire scar every time it rains hard. The Hetch Hetchy Aqueduct and O'Shaughnessy Dam, which supply San Francisco's drinking water, sit inside that same Rim Fire perimeter. Highway 120 itself, the only real road to Yosemite from this side, crosses several of these drainages directly. None of this is hypothetical or far away โ€” it's the same physics currently generating hundreds of National Weather Service flood watches around burn scars across the West, for the exact same reason: burned ground doesn't stay burned in place. It moves downhill, fast, onto whoever's underneath it.

Why This Was Even Possible

This kind of analysis โ€” real drainage modeling, real fire-history overlay, run against a specific county's actual terrain โ€” used to take days of setup, GIS licenses, and someone trained specifically to run them. Nobody does this work for a county of 55,000 people. There's no budget line for it, no newsroom assigned to it. Ryan Shields made a point on that same podcast episode about how tools like this finally make real data journalism viable for the places big outlets never get to. That's the part that's stuck with me the most.

It's not that I built something impressive in thirty minutes. It's that thirty minutes is now enough โ€” and the place that gets that thirty minutes doesn't have to be a place anyone's already paying attention to.

It can just be the place you're from.

By the Numbers
1 DEM ยท 4 tiles ยท 15 million cells ยท 31 seconds
1,151 stream segments ยท 1,187 junctions ยท 6 Strahler orders
30 major fires since 1950 ยท 24% of a county burned ยท 3 canyons that keep catching on a schedule
1 fire that broke out on the exact ground I was mapping, while I was mapping it

Tools & Sources

Software: QGIS 4.0 ยท QGIS MCP Plugin 0.6.0 ยท GRASS GIS (r.watershed, r.stream.extract) ยท GDAL ยท Claude (Anthropic)

Data: USGS 3DEP 30m DEM ยท CAL FIRE FRAP historical perimeters ยท Zillow RegionMaster county boundary

Inspiration: Mapscaping Podcast ยท "10 Tools for Telling Stories With Maps" with Ryan Shields