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.
| Order | Count | Description |
|---|---|---|
| 1 | 131 | Headwater creeks, seasonal, High Sierra meadows |
| 2 | 329 | Small tributaries, named foothill streams |
| 3 | 244 | Major tributaries with year-round flow |
| 4 | 201 | Cherry Creek, Clavey River, South Fork Tuolumne |
| 5 | 189 | Tuolumne River through the canyons above Don Pedro |
| 6 | 57 | Tuolumne mainstem below major confluences |
Hillshade + Strahler-classified streams โ pale headwaters to navy mainstem
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.
FRAP historical perimeters overlaid on Tuolumne County
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
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.
235 stream segments ยท classified extreme / moderate / historical
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.
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