Method & sources
About
I'm a developer, not a cartographer. These maps are a personal project. I made the first one because I wanted a poster of the streams around Bellingham, where I live. Once the process worked for one place, I pointed it at a few more.
Each map starts as public data: stream networks, water bodies, elevation, and gauge readings from agencies like the USGS, state ecology departments, and their Canadian counterparts. Scripts on my laptop download it, clean it up, and size every stream on the page to its typical flow. The same process runs unchanged from Whatcom County to Texas Hill Country. I've done my best to keep each result honest to its sources.
None of this exists without the people who measure and publish that data in the first place: USGS gage keepers, state and provincial ecology departments, city and county GIS staff, and their Canadian counterparts at Environment and Climate Change Canada. Their fieldwork and upkeep are the real work here. I just draw the pictures.
Inspired by Matthew Heberger's American Rivers: A Graphic (Pacific Institute, 2013)
Technical note
Methods
Stroke width encodes mean annual discharge Q (ft3/s). Plates are cartographic products, not hydrologic models, and are not for navigation.
Data
| Role | Source |
|---|---|
| Hydrography | USGS NHDPlus HR (CONUS); USGS NHD (AK); BC Freshwater Atlas; NRCan NHN |
| Discharge | USGS NWIS; ECCC HYDAT. Annual means, 1990–present; discontinued stations retained |
| Waterbodies | NHDPlus HR; WA Ecology; BC FWA; Natural Earth 10 m |
| Basemap | USGS 3DEP / NRCan HRDEM hillshade; WA Ecology IBM 2001; USGS NLCD; NRCan 2020 land cover |
| Ancillary | City of Bellingham culverts; Census TIGER; WA WRIA 1 |
Each sheet's credit line is the source list for that sheet.
Parameters
| Parameter | Value |
|---|---|
| HYDAT snap | 500 m |
| HYDAT name match | 5 km, same-named reach |
| Reach join | 1 km or shared gazetteer id |
| Namesake-split review | <2 km closest-pair gap |
| Coincident overlap | 50 m, same name |
| Stream-order floor | 2 Whatcom, Texas Hill Country; 3 Austin; 4 Salish Sea, Colorado; 5 British Columbia |
| CRS | EPSG 2285, 32610, 3005, 2278, 2277 (auto), 32613 (auto) |
Effective discharge
One Qeff per reach. Measured means precede modeled means. Qsource records the winning tier.
- NWIS mean at EROM GageIDMA (empty / 0 = no gage).
- Curated NHDPlusID–NWIS table.
- EROM QEMA (modeled).
- Null: floor width, unlabeled.
FWA has no modeled mean annual flow. HYDAT is joined by snap, then by name. Confluence name conflicts are rejected.
Network
A named reach is drawn at max(Qeff). Coincident overlapping hydrography adopts flow at the midpoint; the duplicate is dropped by provider order. Border stitch does not transfer Q. Gage flow on a fragment shorter than its stroke is dropped unless neighboring reaches corroborate it.
Symbolization
w = k√Q for Q ≤ Qb; w = k√(Qb + (Q − Qb)/r) for Q > Qb; w = wmin if Q is null. k, Qb, r fit per view.
Limitations
- Ungaged QEMA is modeled.
- FWA without HYDAT or a flowing US twin draws at floor width.
- NHN wide-river centerline gaps are not filled.
- StreamStats backfill is defined and not run.
- The stream index is a labeled subset, not an inventory.
© 2026 codeprimate