Skip to content

fix(web): declutter text by S-52 importance, not anchor draw-order#9

Merged
beetlebugorg merged 1 commit into
mainfrom
feat/text-declutter
Jun 24, 2026
Merged

fix(web): declutter text by S-52 importance, not anchor draw-order#9
beetlebugorg merged 1 commit into
mainfrom
feat/text-declutter

Conversation

@beetlebugorg

Copy link
Copy Markdown
Owner

The general text fanned into nine per-anchor style layers (text-- ) because text-anchor was historically not data-driven. MapLibre keeps one collision index but places symbols layer-by-layer, so a label's survival depended on WHICH anchor sublayer drew first (center-anchored always beat right-anchored) rather than on its importance.

MapLibre 5.24 makes text-anchor and symbol-sort-key data-driven, so collapse the nine layers into one text layer:

  • text-anchor: data-driven match on the baked halign/valign (placement unchanged).
  • symbol-sort-key: ranked by S-52 §14.4 text group (tgrp) — important text (11)

    names (21/26/29) > descriptive, minus font size for within-tier ties. Lower
    wins, so a dense approach thins to the navigationally important labels.

  • light-text keeps its own earlier always-wins layer, now with a size-based sort-key.

Collapse the two live updaters (setScheme restyle, setMariner text-group filter) onto the single text id and drop the now-dead TEXT_VARIANTS/textAnchor.

Pure client change, no re-bake. Verified on server-mode d5 Annapolis: same label budget but channel/feature names now survive collisions; text-group toggle and day/night restyle still work.

The general text fanned into nine per-anchor style layers (text-<halign>-
<valign>) because text-anchor was historically not data-driven. MapLibre keeps
one collision index but places symbols layer-by-layer, so a label's survival
depended on WHICH anchor sublayer drew first (center-anchored always beat
right-anchored) rather than on its importance.

MapLibre 5.24 makes text-anchor and symbol-sort-key data-driven, so collapse
the nine layers into one `text` layer:
- text-anchor: data-driven match on the baked halign/valign (placement
  unchanged).
- symbol-sort-key: ranked by S-52 §14.4 text group (tgrp) — important text (11)
  > names (21/26/29) > descriptive, minus font size for within-tier ties. Lower
  wins, so a dense approach thins to the navigationally important labels.
- light-text keeps its own earlier always-wins layer, now with a size-based
  sort-key.

Collapse the two live updaters (setScheme restyle, setMariner text-group
filter) onto the single `text` id and drop the now-dead TEXT_VARIANTS/textAnchor.

Pure client change, no re-bake. Verified on server-mode d5 Annapolis: same
label budget but channel/feature names now survive collisions; text-group
toggle and day/night restyle still work.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@beetlebugorg beetlebugorg merged commit 475d32b into main Jun 24, 2026
4 checks passed
@beetlebugorg beetlebugorg deleted the feat/text-declutter branch June 24, 2026 23:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant