GeoLeaf Core API - v3.19.0
    Preparing search index...

    Snapshot of the serializable map state. All fields except lat, lng, zoom are optional.

    interface PermalinkState {
        lat: number;
        lng: number;
        zoom: number;
        layers?: string[];
        shownLayers?: string[];
        filter?: string;
        categories?: string[];
        tags?: string[];
        rating?: number;
        theme?: string;
        fieldFilters?: Record<string, string>;
    }
    Index
    lat: number

    Map centre latitude [-90, 90].

    lng: number

    Map centre longitude [-180, 180].

    zoom: number

    Map zoom level [0, 28].

    layers?: string[]

    List of layer IDs that the user has explicitly hidden.

    shownLayers?: string[]

    List of layer IDs that the user has manually shown (not part of the active theme).

    filter?: string

    Active text filter value.

    categories?: string[]

    Active taxonomy filter — flat category + sub-category value set (gl_cats).

    tags?: string[]

    Active tag filter (list of selected tag values).

    rating?: number

    Minimum rating filter (0 = no filter).

    theme?: string

    Active data theme ID (e.g. "tourism", "administration").

    fieldFilters?: Record<string, string>

    Active 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.