Skip to content

GeoLeaf — Configuration des plugins dans un profil

Version : 2.0.0 Dernière mise à jour : mars 2026


Vue d'ensemble

Certaines clés de configuration dans profile.json et ui.json n'ont d'effet que lorsque le plugin correspondant est chargé. Sans le plugin, la clé est lue sans erreur et ignorée silencieusement. Cette conception permet de définir les configurations à l'avance et de charger les plugins optionnellement selon l'environnement.

Clé de profilPlugin requisEffet quand le plugin est chargé
ui.showCacheButton@geoleaf-plugins/storageAffiche le bouton de gestion du cache offline
ui.showAddPoi@geoleaf-plugins/addpoiAffiche le bouton d'ajout de POI
storage@geoleaf-plugins/storageConfigure le cache offline (tiles, profil)
poiAddConfig@geoleaf-plugins/addpoiConfigure le formulaire d'ajout de POI

Note : @geoleaf-plugins/storage et @geoleaf-plugins/addpoi sont des plugins commerciaux distribués via npm.pkg.github.com. @geoleaf/connector (authentification HTTP) est MIT et distribué via npmjs.org.


Plugin Storage — @geoleaf-plugins/storage

Activer le bouton cache

Dans ui.json → section ui :

json
{
    "ui": {
        "showCacheButton": true
    }
}

Sans ce flag à true, le bouton n'apparaît pas même si le plugin est chargé.

Bloc storage dans profile.json

Configure le comportement du cache offline :

json
{
    "storage": {
        "enableOfflineDetector": true,
        "enableServiceWorker": false,
        "cache": {
            "enableProfileCache": true,
            "enableTileCache": true
        }
    }
}
CléTypeDéfautDescription
enableOfflineDetectorbooleanfalseSurveille la connectivité réseau et affiche un indicateur offline
enableServiceWorkerbooleanfalseActive la mise en cache via Service Worker (complémentaire à IndexedDB)
cache.enableProfileCachebooleantrueMet en cache les fichiers du profil (JSON de config, taxonomie, etc.)
cache.enableTileCachebooleantrueMet en cache les tuiles cartographiques (raster + vecteur)

Cache par couche (dans basemaps.json)

La configuration du cache peut être affinée au niveau de chaque fond de carte :

json
{
    "basemaps": {
        "osm": {
            "label": "OpenStreetMap",
            "type": "tile",
            "url": "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
            "offline": true,
            "cacheMinZoom": 8,
            "cacheMaxZoom": 16,
            "offlineBounds": {
                "north": 48.9,
                "south": 48.8,
                "east": 2.4,
                "west": 2.3
            }
        }
    }
}
CléDescription
offlineAutorise la mise en cache offline pour ce fond de carte
cacheMinZoomNiveau de zoom minimum à précharger
cacheMaxZoomNiveau de zoom maximum à précharger
offlineBoundsEmprise géographique à mettre en cache (north, south, east, west)

Plugin AddPOI — @geoleaf-plugins/addpoi

Activer le bouton d'ajout

Dans ui.json → section ui :

json
{
    "ui": {
        "showAddPoi": true
    }
}

Bloc poiAddConfig dans profile.json

Configure le comportement du formulaire d'ajout de POI :

json
{
    "poiAddConfig": {
        "enabled": true,
        "defaultPosition": "geolocation"
    }
}
CléTypeValeursDescription
enabledbooleantrue / falseActive ou désactive la fonctionnalité d'ajout
defaultPositionstring"geolocation" / "center"Position initiale du nouveau POI : position GPS de l'utilisateur ou centre de la carte

Configuration avancée : Le formulaire d'ajout, les champs personnalisés et l'endpoint d'envoi sont configurés directement dans le plugin. Voir la documentation @geoleaf-plugins/addpoi pour les options complètes.


Exemple : profil avec les deux plugins activés

profile.json

json
{
    "id": "mon-profil",
    "label": "Mon Profil",
    "version": "1.0.0",

    "map": {
        "center": [48.8566, 2.3522],
        "zoom": 12
    },

    "Files": {
        "taxonomyFile": "taxonomy.json",
        "layersFile": "layers.json",
        "basemapsFile": "basemaps.json",
        "uiFile": "ui.json"
    },

    "clusteringConfig": {
        "enabled": true,
        "strategy": "by-layer",
        "maxClusterRadius": 80,
        "disableClusteringAtZoom": 16
    },

    "storage": {
        "enableOfflineDetector": true,
        "enableServiceWorker": false,
        "cache": {
            "enableProfileCache": true,
            "enableTileCache": true
        }
    },

    "poiAddConfig": {
        "enabled": true,
        "defaultPosition": "geolocation"
    }
}

ui.json

json
{
    "ui": {
        "theme": "auto",
        "language": "fr",
        "showLayerManager": true,
        "showFilterPanel": true,
        "showLegend": true,
        "showTable": true,
        "showThemeSelector": true,
        "enableGeolocation": true,
        "showCacheButton": true,
        "showAddPoi": true,
        "permalink": {
            "enabled": true,
            "mode": "hash"
        }
    },
    "search": {
        "title": "Filtrer",
        "searchPlaceholder": "Rechercher...",
        "filters": [
            {
                "id": "searchText",
                "type": "search",
                "label": "Recherche textuelle",
                "placeholder": "Nom...",
                "searchFields": ["properties.name"]
            }
        ]
    }
}

Chargement des plugins (ESM)

js
import "@geoleaf/core";
import "@geoleaf/connector"; // optionnel — si API auth requise
import "@geoleaf-plugins/storage"; // débloque showCacheButton + storage.*
import "@geoleaf-plugins/addpoi"; // débloque showAddPoi + poiAddConfig.*

GeoLeaf.init({
    map: { target: "map" },
    data: {
        activeProfile: "mon-profil",
        profilesBasePath: "./profiles/",
    },
});
GeoLeaf.boot();

Ordre d'import : les plugins doivent être importés après @geoleaf/core. Voir PLUGIN_DEVELOPMENT_GUIDE.md → section "Ordre de chargement".


Règle fondamentale : dégradation silencieuse

Les clés storage, poiAddConfig, showCacheButton et showAddPoi sont toujours valides dans le schéma de configuration de GeoLeaf. Si le plugin correspondant n'est pas chargé :

  • Aucune erreur n'est levée
  • La clé est lue et ignorée
  • Le bouton ou la fonctionnalité n'apparaît pas

Ce comportement est intentionnel : il permet de maintenir un profil unique pour différents environnements (avec ou sans plugins commerciaux).


Vérifier l'état des plugins au runtime

js
// Liste des plugins chargés
GeoLeaf.PluginRegistry.getLoadedPlugins();
// → ["core", "connector", "storage", "addpoi"]

// Vérifier un plugin spécifique
GeoLeaf.PluginRegistry.isLoaded("storage"); // → true / false
GeoLeaf.PluginRegistry.isLoaded("addpoi"); // → true / false

Voir aussi

Released under the MIT License.