feat(map): low-zoom aggregation tile source
featureready-for-agent
## What to build
Replace the "Zoom in to see X" hint on `/map` with low-zoom aggregation. End-to-end: open `/map` at city zoom with the WCs layer on, see building-centroid count bubbles per TUM building (e.g. "MI: 12 toilets"); zooming in past the per-layer indoor-minzoom transitions seamlessly to individual markers.
Add a PG function `pois_aggregated(z, x, y)` that joins `pois` to the buildings polygon source and returns one centroid per building per category with a `count` field. Below the per-layer indoor-minzoom, the basemap style renders these as circle layers with text labels; above, it renders the existing markers. Verify a buildings polygon source is available in the tile pipeline before committing to the join shape — if absent, this slice may need to surface one first.
The "Zoom in to see X" hint UI from the framework slice is removed: the empty-map UX is no longer an issue at low zoom.
## Acceptance criteria
- [ ] `pois_aggregated(z, x, y)` PG function exists and returns building-centroid counts per category.
- [ ] Basemap style includes count-bubble layers at z below the per-layer indoor-minzoom and individual-marker layers at z above it.
- [ ] At city zoom on `/map` with WCs enabled, count bubbles appear per building.
- [ ] Zooming past the threshold transitions cleanly to individual markers (no flicker, no duplicate render).
- [ ] The "Zoom in to see X" hint UI is removed from the layer panel.
- [ ] WCs, events, and validator layers continue to work unchanged.
0 条评论