Skip to content

GeoLeaf — Documentation des schémas JSON

Version : 2.0.0 Mise à jour : mars 2026 Source de vérité : profiles/schemas/


Vue d'ensemble

Ce répertoire ne contient plus les schémas (déplacés dans profiles/schemas/). Il sert de point d'entrée documentaire pour tous les schémas JSON Schema draft-07 de GeoLeaf.

Les schémas valident les fichiers de configuration JSON du profil actif. Ils permettent l'autocomplétion et la validation en ligne dans VSCode via la propriété $schema.


Schémas disponibles

SchémaFichier JSON validéDescription
geoleaf-config.schema.jsongeoleaf.config.jsonConfiguration racine (debug, map, data, ui, branding, pwa, security, logging)
profile.schema.jsonprofile.jsonProfil applicatif (id, name, files, layerTemplates)
geoleaf-profile.schema.jsonprofile.jsonStructure étendue avec sections ui, basemaps, performance (v1.3.0+)
basemaps.schema.jsonbasemaps.jsonSources de tuiles raster et vectorielles
ui.schema.jsonui.jsonContrôles UI, permalink, échelle, filtres
layers.schema.jsonlayers.jsonRéférences des couches du profil
layer-config.schema.jsonlayers/*/[id]_config.jsonConfiguration par couche (data, styles, popup, sidepanelConfig, clustering)
style.schema.jsonlayers/*/styles/*.jsonStyles de rendu (format flat, styleRules, expressionPaint)
taxonomy.schema.jsontaxonomy.jsonTaxonomie POI (catégories, icônes, couleurs)
themes.schema.jsonthemes.jsonPréréglages de visibilité des couches
mapping.schema.jsonmapping.jsonNormalisation des données POI externes

Utilisation

Validation en ligne (VSCode)

Ajouter $schema au début du fichier JSON :

json
{
    "$schema": "../../schemas/style.schema.json",
    "id": "mon-style",
    "style": {
        "fillColor": "#4681cb",
        "fillOpacity": 0.6,
        "color": "#2a5599",
        "weight": 1
    }
}

Validation en ligne de commande (ajv-cli)

bash
npm install -g ajv-cli

# Valider tous les styles du profil tourism
ajv validate -s profiles/schemas/style.schema.json \
  -d "profiles/tourism/layers/**/styles/*.json" \
  --all-errors

# Valider les configs de couches
ajv validate -s profiles/schemas/layer-config.schema.json \
  -d "profiles/tourism/layers/**/*_config.json" \
  --all-errors

Format des styles (flat)

Les styles GeoLeaf utilisent le format flat — toutes les propriétés sont au niveau racine de l'objet style. Le format nested { fill: { color }, stroke: { color } } n'est plus supporté depuis v2.0.0.

Propriétés disponibles

PropriétéTypeDescription
fillColorstring (hex)Couleur de remplissage (polygones)
fillOpacitynumber 0–1Opacité du remplissage
colorstring (hex/CSS)Couleur du contour / ligne
weightnumber ≥ 0Épaisseur du contour en pixels
opacitynumber 0–1Opacité du contour
dashArraystringTirets, ex. "5 10"
lineCap"butt" | "round" | "square"Terminaison de ligne
lineJoin"bevel" | "miter" | "round"Jointure de ligne
radiusnumber ≥ 0Rayon du cercle (couches point)
shapestringForme du point : "circle", "square", etc.
hatchobjectHachures canvas (enabled, type, spacingPx, renderMode)
casingobjectDouble contour (enabled, color, opacity, widthPx)
expressionPaintobjectPropriétés MapLibre GL passées directement (expressions zoom, match, etc.)

Exemple complet

json
{
    "id": "par_categorie",
    "label": "Par catégorie",
    "zoomConfig": { "minZoom": null, "maxZoom": null },
    "style": {
        "fillColor": "#4681cb",
        "fillOpacity": 0.6,
        "color": "#2a5599",
        "weight": 1.5,
        "opacity": 1
    },
    "styleRules": [
        {
            "when": { "field": "properties.categorie", "operator": "==", "value": "A" },
            "style": { "fillColor": "#e74c3c" },
            "legend": { "label": "Catégorie A" }
        }
    ]
}

Règles de style conditionnelles (styleRules)

Les styleRules permettent un style data-driven. La première règle dont la condition est vraie est appliquée.

Opérateurs disponibles (16)

OpérateurDescription
== / === / eqÉgalité
!= / !== / neqDifférence
>Supérieur
>=Supérieur ou égal
<Inférieur
<=Inférieur ou égal
containsContient la sous-chaîne
startsWithCommence par
endsWithFinit par
inValeur dans un tableau
notInValeur absente du tableau
betweenValeur dans un intervalle [min, max]

Condition composée (AND)

json
{
    "when": {
        "all": [
            { "field": "properties.type", "operator": "==", "value": "parc" },
            { "field": "properties.surface", "operator": ">=", "value": 100 }
        ]
    },
    "style": { "fillColor": "#2ecc71" }
}

Étiquettes (label objet)

La propriété label dans un fichier de style peut être une chaîne (nom d'affichage) ou un objet de configuration des étiquettes cartographiques.

json
{
    "label": {
        "enabled": true,
        "visibleByDefault": false,
        "field": "properties.nom",
        "font": {
            "family": "Arial",
            "sizePt": 11,
            "weight": 50,
            "bold": false,
            "italic": false
        },
        "color": "#333333",
        "opacity": 1,
        "buffer": {
            "enabled": true,
            "color": "#ffffff",
            "opacity": 0.8,
            "sizePx": 2
        },
        "background": {
            "enabled": false,
            "color": "#ffffff",
            "opacity": 0.9,
            "paddingPx": 3
        },
        "offset": {
            "distancePx": 8,
            "angleDeg": 0
        }
    }
}

expressionPaint (MapLibre natif)

Pour les cas complexes (interpolations de zoom, expressions match), utilisez expressionPaint avec les propriétés MapLibre GL directement :

json
{
    "style": {
        "expressionPaint": {
            "fill-color": ["interpolate", ["linear"], ["zoom"], 5, "#aaa", 10, "#4681cb"],
            "fill-opacity": ["case", ["get", "actif"], 0.8, 0.3]
        }
    }
}

Les clés sont des noms de propriétés MapLibre GL paint (fill-color, line-width, circle-radius, etc.).


Liens

Released under the MIT License.