A small density map for the corner of a dashboard that is also its fastest geo filter. No geocoding build, no radius parameters, no map sheet with a dozen actions: drop it on the dashboard and catch rows with a gesture.
| Gesture | What it filters |
|---|---|
| Hover a state | outlines it, tooltip with its rows (or measure total) |
| Click a state | State on every other sheet. Shift-click adds states; click again to clear |
| Drag a box | Key to the locations inside the box. Shift-drag adds to the net |
| Alt-drag | a radius from the press point, read out live in miles (great-circle), same Key filter |
| Scroll / double-click | zoom about the cursor / reset. Right-drag or Space-drag pans |
| +50 / +100 / +500 | grows the map's zone that much (⤢ = as big as the dashboard allows). To shrink back: double-click the header bar, click the lit ⤡ restore button, or click the lit +N again |
| – | minimizes to the header bar |
| Esc or the chip | clears the map filter |
The density dropdown in the header picks what the heat counts: rows, or any measure on the source sheet. In authoring mode the choice is saved with the workbook; viewers can switch it for their session.
#Setup
- Make a small worksheet with State, Latitude, Longitude and a Key (facility, address, ZIP: whatever one point is) on Detail, plus any measures you want to heat by. Put it on the dashboard (it can sit in a collapsed container). Minimap reads it and never filters it, so the map always shows the whole field of play.
- Add Minimap to the dashboard, ideally floating in a bottom corner: the boost badges resize a floating zone in place, anchored to the corner it sits nearest. A tiled zone can't be resized by an extension, so there the badges magnify the map instead (1.5×, 2×, 6×).
- Fields are auto-detected (latitude/longitude by name, State, the first name/id/facility/address/ZIP-like dimension as Key). Override any of them in ⚙ settings, and untick sheets Minimap should leave alone.
Fallbacks: no Key field → a box or radius filters a latitude/longitude range instead. No State field → states are derived from the coordinates, and a state click filters the Key. No coordinates → each row stands in at its state's centroid, so a state-only sheet still heats and state clicks still filter.
#Settings
- Data: source sheet, latitude, longitude, state, key; sheets to filter.
- Heat: density measure, spread (kernel radius), heavy hitters (cap weights at p99 / p95 / Q3 + 1.5×IQR so one giant location can't wash out the map; the dialog shows how many locations the cap touches).
- Appearance: title, light/dark theme, accent.
#How it works
minimap.js reads the source sheet's summary data a page at a time (up to
500k rows), projects every point once per pane size with d3.geoAlbersUsa, and
bins them into a screen-space grid that a 3-pass box blur turns into a smooth
kernel density, normalized on the 99.5th percentile of lit cells and clipped to
the states. Zooming re-bins at screen resolution, so detail sharpens as you go in;
past 3× (or under ~400 visible points) individual locations appear as dots.
Filters go out with applyFilterAsync (Replace) to every dashboard sheet except
the source; sheets that lack the field are skipped.
Geo stack is vendored in vendor/ (d3 v7, topojson-client, US states atlas).
No data-access permission is requested.