Skip to content
← All tools

Tool

Soil Contamination Visualizer

A self-contained figure tool that loads GeoJSON soil data and renders contamination maps and figures, filtered live by analyte, sampling round, and threshold.

  • JavaScript
  • GeoJSON
  • HTML
View code ↗

The problem

Contamination figures get regenerated constantly as new sampling rounds come in. Building them by hand each time is slow, and small inconsistencies creep in between versions.

What I built

A single-file visualizer that reads the sample data as GeoJSON and renders maps and figures that update live as you change the filters — sampling round, “sampled only,” and a mercury threshold slider — with statistics recomputed on the fly.

How I solved a piece of it

A single filter function is the heart of it: it reads the active dataset checkboxes and the threshold input, then returns only the sampled features above that threshold. Everything the figure draws — points, counts, stats — derives from that one filtered set, so the whole view stays consistent as you adjust controls.

Outcome

Figures that used to be hand-assembled became a few clicks, consistent across versions, and easy to regenerate whenever the data changed.

A snippet

const getFilteredFeatures = () => {
const dsFilter = Array.from(document.querySelectorAll('.dsFilter:checked'))
.map((cb) => cb.value);
return DATA.features.filter((f) =>
dsFilter.includes(f.properties.round.toString()) &&
f.properties.sampled === true &&
(f.properties.Hg || 0) > parseInt(document.getElementById('fThr').value)
);
};