Interactive map of six California regional water monitoring programs (RMPs). Station locations (and, for Russian River, wetland inventory polygons) are aggregated into H3 hex grids at about 5 km, 3 km, and 1 km. The map shows where programs observe the landscape — not lab results over time.
Live map: https://cawaterboarddatacenter.github.io/rmp-map/
Future Directions: RMP_Map_Future_Directions.pdf — written by the author, Isamu Thung, on possible next steps and extensions for this map (not product documentation for the current build).
Local preview:
python -m http.server 3000
# open http://localhost:3000Programs differ in design and data systems, but each layer answers the same spatial question: where does this program observe? Hex grids put those footprints on a common grid so overlaps and gaps are easier to see.
Most CEDEN-based layers come from Water Quality (Chemistry) downloads used to locate stations. Separate CEDEN categories (toxicity, tissue, benthic, habitat) were not pulled into this build. Klamath Basin uses KBMP’s station metadata spreadsheet. Russian River uses RRARI wetland inventory polygons, not sample stations.
| Program | What the hexes represent |
|---|---|
| Delta | Monitoring stations |
| SF Bay | Monitoring stations |
| Klamath Basin | Monitoring stations |
| SMC | Stormwater Monitoring Coalition fixed sites |
| Southern California Bight | Survey stations across Bight batches |
| Russian River | Wetland area coverage (RRARI polygons), not point stations |
Each Russian River hex counts how many RRARI wetland inventory polygons intersect that cell. Those are delineated habitat features from the source GIS — not “N wetlands that are each monitored with water samples” inside the hex. Monitoring results, if any, must be sought from R3MP / SFEI sources or CEDEN separately.
Program blurbs, themes, freshness, and find-data links for the UI live in data/program_profiles.json.
Local (http://localhost:3000) and live Pages serve the same main branch files.
- About — welcome pane (Overview, Table of all six programs, program blurbs)
- Summary — half-screen drawer; instantly solos one RMP on the map, then smooth-zooms; closing restores the previous multi-program view. Metadata block shows footprint counts, regional boards, board-filter status, data range, and theme tags.
- Programs / Hex / Map / Overlays / Filter — layer and view controls
- Hex hover — larger count tag (stations, wetland polygons, or overlap features)
- Hex click — opens that hex’s own records (station table for monitoring programs; wetland polygon summary only for Russian River / area coverage)
- Filter — regional water board filter; non-matching hexes are grayed on the map
- Defaults: light-grey basemap, 5 km hexes, three lighter programs (Delta, SF Bay, SMC)
Yes — several programs appear in the CEDEN Query Tool under the Program filter (exact names are in program_profiles.json).
- Open https://ceden.waterboards.ca.gov/CQT/Home/AqtTool
- Process: Download Results as TSV
- Category: Water Quality (Chemistry)
- Program: use the exact CEDEN program name for that RMP
- IncludeQCData: NoQCData → Submit
https://data.ca.gov/dataset/?q=CEDEN hosts yearly bulk files and portal APIs by data category (chemistry, toxicity, etc.). Those dumps do not filter cleanly by Program the way the CEDEN Query Tool does. Prefer CEDEN for program-scoped downloads; use Open Data for category-wide bulk access.
program_profiles.json includes example CEDEN web-service URLs shaped like:
https://cedenwebservices.waterboards.ca.gov:9267/cedenwaterqualityresultslist/?queryParams={"filter":[{"program":"PROGRAM_NAME_HERE"}],"top":1000}
These are starting points for developers, not a guarantee that every environment returns a full extract. See Testing the example API URLs below.
Website: https://deltarmp.org/
- https://ceden.waterboards.ca.gov/CQT/Home/AqtTool
- Download Results as TSV → Category: Water Quality (Chemistry) → Program: Delta Regional Monitoring Program → NoQCData → Submit
Website: https://www.sfei.org/programs/rmp
- CEDEN Query Tool → Chemistry → Program: SF Bay Regional Monitoring for Water Quality → NoQCData
Website: https://kbmp.net/
Primary footprint: KBMP Monitoring Location Metadata spreadsheet
https://kbmp.net/maps-and-data/monitoring-locations · https://kbmp.ecoatlas.org/map.php
Note: CEDEN under “Klamath Basin Monitoring Program” has far fewer stations than KBMP’s spreadsheet.
Website: https://socalsmc.org/
CEDEN Query Tool → Chemistry → Program: Southern CA Stormwater Monitoring Coalition → NoQCData
(SMC public data links are often unreliable; CEDEN was the practical path used here.)
Website: https://www.sccwrp.org/
CEDEN Query Tool → Chemistry → Program: Southern California Bight Program → NoQCData
Stations carry a survey batch_year in cleaned data.
R3MP overview: https://www.russianriverconfluence.org/r3mp
Primary footprint: RRARI v1.0 Wetland Polygons (geopackage)
https://www.sfei.org/data/russian-river-aquatic-resource-inventory-rrari-version-10-gis-data
CEDEN “Russian River MS4 Program” has very few unique stations and is not used for the primary hex footprint.
├── index.html # Map UI
├── .nojekyll
├── data/
│ ├── program_profiles.json # UI summaries, themes, find-data links
│ ├── geojson/ # Built hex layers + manifest.json
│ ├── cleaned/ # Unified station CSVs
│ ├── ca_counties.geojson
│ ├── ca_regional_boards.geojson
│ └── raw/ # Local only (gitignored)
├── scripts/ # clean_*.py per program
└── map/ # build_h3_geojson.py and helpers
The browser only reads index.html and files under data/ (geojson, overlays, profiles). Raw downloads stay local.
python -m venv venv
.\venv\Scripts\Activate.ps1
pip install -r requirements.txt
# Clean sources (see each scripts/clean_*.py for expected raw filenames)
python scripts/clean_delta.py
python scripts/clean_sf.py
python scripts/clean_klamath.py
python scripts/clean_smc.py
python scripts/clean_russian_river_wetlands.py
python scripts/clean_bight.py
# Build hex layers → data/geojson/
python map/build_h3_geojson.py
python -m http.server 3000Files in data/cleaned/ are named {program_id}.csv with columns:
| Column | Required | Notes |
|---|---|---|
station_id |
yes | Unique within the program |
station_name |
yes | Can be empty |
lat / lon |
yes | WGS84 |
Optional columns (county, waterbody, batch_year, etc.) show up in the hex click panel.
Russian River uses a GeoPackage of wetland polygons instead of a station CSV (source: "polygons" in map/build_h3_geojson.py). The older CEDEN station export is paused under data/cleaned/_paused/.
What they are: example GET requests against CEDEN’s web services (cedenwaterqualityresultslist and related endpoints), with a JSON-style queryParams filter that includes a program name. They are documented as developer examples in About → Find data and in program_profiles.json.
What they are not: a live guaranteed download of this map’s full chemistry extracts, and not the same as data.ca.gov’s yearly Open Data APIs.
- Copy an example URL from
data/program_profiles.json→programs.<id>.api.url(Delta / SF Bay / SMC / Bight have examples). - Paste into a browser address bar, or:
Invoke-WebRequest -Uri 'PASTE_URL_HERE' -Headers @{ Accept = 'text/csv' } -OutFile ceden_sample.csv- Expect either CSV/text results, an auth/network error, or an empty/partial response depending on CEDEN service availability, network path, and query size (
topcaps the row count). - For reliable program-scoped downloads for rebuilding this map, use the CEDEN Query Tool steps above instead of depending on the web-service URL alone.
- For category-wide bulk files, use https://data.ca.gov/dataset/surface-water-chemistry-results (and related CEDEN datasets) — those portal APIs do not replace Program filtering.
Klamath and Russian River do not have a dependable program-scoped chemistry web-service URL in this project; use KBMP / RRARI downloads.
Served from the main branch root.
- Push updates to
main - Repo Settings → Pages → Deploy from branch →
main// (root) - Open the live URL above
After rebuilding GeoJSON locally:
git add data/geojson
git commit -m "Rebuild hex layers"
git push