feat(core,fuse,gui): places on a world map

The Places view gets a Grid/Map toggle. The map shows a bubble per town,
sized by its number of photos, over the outline of the world's land. Towns
whose bubbles would overlap merge into one that counts all their photos, and
clicking it zooms in until they part; clicking a single town opens it like a
card does. Drag to pan, scroll or pinch to zoom, and the buttons zoom in,
zoom out or frame every place again. Hovering names the town, or the first
few towns of a merged bubble.

No tile server is involved: none that is free has terms allowing an app like
this one to use it. The map is drawn from Natural Earth's 1:50m land
polygons (public domain), trimmed and simplified by
scripts/natural-earth-land.py into crates/pdfs-gui/data/land.txt, in Web
Mercator. The About dialog credits Natural Earth.

PlaceInfo carries the town's latitude and longitude; a daemon older than the
map sends none, and its towns are left off the map.
This commit is contained in:
nvrl committed 2026-09-28 02:12:59 +02:00
1 parent 8749d6c2c6
commit b3c03a7162
21 files changed
+4223 -1693

No files matched your search

+4
View File
@@ -89,3 +89,7 @@ progressbar.browser-status-meter trough, progressbar.browser-status-meter progre
/* Photos: how many timeline filters are on, as a small badge on the Filters button. */
.filter-count { min-width: 18px; padding: 0 5px; border-radius: 999px; font-size: 0.8em; font-weight: 700; color: var(--accent-fg-color); background-color: var(--accent-bg-color); }
/* The Places map: water a faint wash of the text colour, bubbles (drawn in
* the area's own colour) in the accent. */
.places-map-frame { border-radius: 12px; background: color-mix(in srgb, currentColor 5%, transparent); }
.places-map { color: var(--accent-bg-color); }