Greedy label collision detection for city names
City labels were getting overwritten by braille-rendered map features
(station markers, route lines, train circles). Fixed with two changes:
1. Greedy collision detection: compute approximate bounding boxes for
each label in geo-coordinate space, sorted by population priority.
Skip labels that overlap any previously placed label, train marker,
or station marker. Uses AABB intersection testing.
2. Render city labels as the topmost layer (layer 12) so text characters
aren't overwritten by braille dots drawn in later layers.
Labels are placed offset-right of the city coordinate with collision-
aware spacing. Dense areas (like the NEC corridor) will show only the
highest-population cities that fit without overlap.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>