visualizedata.org

Prototype. These numbers are estimated from satellite images, not measured in the water. Don't use them to decide whether to swim; check your county or state health department for algae advisories.

How it works

Every number on the lake pages comes from satellite images, processed the same way for every lake. Here is the whole recipe, and its limits.

1. The lake

Each lake's outline comes from OpenStreetMap. The outline is moved 60 m in from every shore before anything is measured: a 30 m Landsat pixel that straddles the shore mixes water with sand, docks and weeds. Narrow bays drop out as a result.

2. Water greenness (NDCI)

Sentinel-2 photographs Minnesota every few days. For each image,satellitedata.net keeps the pixels inside the outline that the image's own scene classification calls water, drops cloud and cloud shadow, and computes the normalised difference chlorophyll index: (red edge − red) / (red edge + red). Chlorophyll absorbs red light and algae reflect at the red edge, so the index rises as water turns green. Each month's value is the average of every clear water pixel in every image that month.

NDCI is a relative signal, best for comparing a lake with itself across months and years, and lakes with each other. It is not a concentration, and very turbid or shallow water (sediment, a visible bottom) can push it up without algae.

3. Chlorophyll-a

For a concentration in µg/L, the site uses the water-quality model from RemoteSensing, trained on Landsat images matched with water samples (AquaSat). For each month it picks the Landsat 8 or 9 pass on which the most of the lake was clear water, at least half of it; downloads that pass as surface reflectance; removes cloud, shadow and shore pixels; and runs every remaining pixel through the model, exactly as RemoteSensing's own raster stage does. The lake's value is the median pixel.

A model is only as good as its test score. Every lake page shows the model's test R², the share of the variation in measured chlorophyll it explained on samples it never saw. Below 0.5 the page gives the estimate with a warning and no trophic-state label (oligotrophic to hypereutrophic, by Carlson's index).

What this cannot tell you

Data and code

Each lake's numbers can be downloaded as JSON from its page. The pipeline is Python (OpenStreetMap through the Overpass API, satellitedata.net statistics and downloads, RemoteSensing's model engine); the site is static pages built with Astro. Satellite data: Copernicus Sentinel-2 (ESA) and Landsat 8 and 9 (USGS/NASA). Outlines © OpenStreetMap contributors (ODbL).