Map centre latitude [-90, 90].
Map centre longitude [-180, 180].
Map zoom level [0, 28].
OptionallayersList of layer IDs that the user has explicitly hidden.
OptionalshownList of layer IDs that the user has manually shown (not part of the active theme).
OptionalfilterActive text filter value.
OptionalcategoriesActive taxonomy filter — flat category + sub-category value set (gl_cats).
OptionaltagsActive tag filter (list of selected tag values).
OptionalratingMinimum rating filter (0 = no filter).
OptionalthemeActive data theme ID (e.g. "tourism", "administration").
OptionalfieldActive filter, ONE ENTRY PER FIELD — keyed by the field's descriptor id
(modules.filter.fields[].id), valued in the URL's own grammar: a text field's
query, a,b,c for a tag or taxonomy field, min..max for a range. A taxonomy
field's checked sub-categories ride under <id>.sub, as category/sub-category pairs.
This is what a permalink WRITES since 3.15.0 (gl_f.<id> parameters). The four members
above it — filter, categories, tags, rating — are the former by-kind slots:
still read from a link that carries them, never captured any more.
⚠️ Raw strings, on purpose: the kind of a field is not in the URL, so an entry can only
be read FOR a descriptor (permalink-field-filters.ts). When this member is present,
the by-kind slots are ignored on restore.
Snapshot of the serializable map state. All fields except
lat,lng,zoomare optional.