back to home

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

RoleSource
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

ParameterValue
HYDAT snap500 m
HYDAT name match5 km, same-named reach
Reach join1 km or shared gazetteer id
Namesake-split review<2 km closest-pair gap
Coincident overlap50 m, same name
Stream-order floor2 Whatcom, Texas Hill Country; 3 Austin; 4 Salish Sea, Colorado; 5 British Columbia
CRSEPSG 2285, 32610, 3005, 2278, 2277 (auto), 32613 (auto)

Effective discharge

One Qeff per reach. Measured means precede modeled means. Qsource records the winning tier.

  1. NWIS mean at EROM GageIDMA (empty / 0 = no gage).
  2. Curated NHDPlusID–NWIS table.
  3. EROM QEMA (modeled).
  4. 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

© 2026 codeprimate