Skip to content

GeoLeaf — Configuration des plugins dans un profil

Version : 2.1.5 Dernière mise à jour : avril 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
(aucune clé)@geoleaf/connectorIntercepteur fetch — auto-activé à l'import
(aucune clé)@geoleaf-plugins/file-importActive l'API GeoLeaf.FileImport.*
(aucune clé)@geoleaf-plugins/flatgeobufActive l'API GeoLeaf.FlatGeobuf.*
(aucune clé)@geoleaf-plugins/cogActive l'API GeoLeaf.COG.*
(aucune clé)@geoleaf-plugins/websocketFlux temps réel POI via WebSocket (roadmap)
(aucune clé)@geoleaf-plugins/realtime-layerCouches à rafraîchissement automatique (roadmap)

Note : @geoleaf-plugins/storage, @geoleaf-plugins/addpoi et @geoleaf-plugins/cog sont des plugins commerciaux distribués via npm.pkg.github.com. @geoleaf/connector, @geoleaf-plugins/file-import et @geoleaf-plugins/flatgeobuf sont MIT et distribués 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.


Plugin Connector — @geoleaf/connector

Licence : MIT | Registre : npmjs.org | Statut : Disponible

@geoleaf/connector est un intercepteur fetch universel qui ajoute automatiquement les headers d'authentification (Bearer token, API key, cookie) aux requêtes vers les sources de données GeoLeaf. Il ne nécessite aucune clé de profile.json — il s'active dès qu'il est importé.

Installation

bash
npm install @geoleaf/connector

Utilisation

js
import "@geoleaf/core";
import "@geoleaf/connector"; // intercepteur actif immédiatement

// Configurer l'authentification pour une source
GeoLeaf.Connector.configure({
  baseUrl: "https://api.example.com",
  auth: {
    type: "bearer",
    token: () => localStorage.getItem("access_token"),
  },
});

Paramètres de configuration

ParamètreTypeDescription
baseUrlstringURL de base à intercepter
auth.typestring"bearer" / "apikey" / "cookie"
auth.tokenstring/fnToken statique ou fonction retournant le token dynamiquement
auth.headerNamestringNom du header (défaut : "Authorization" pour bearer, configurable)

L'option auth.token accepte une valeur statique ou une fonction synchrone/asynchrone — utile pour les tokens à renouvellement automatique.


Plugin File Import — @geoleaf-plugins/file-import

Licence : MIT | Registre : npmjs.org | Statut : Disponible (~70 KB gzip)

Permet l'import de fichiers géographiques côté client (GPX, KML/KMZ, CSV, TopoJSON) et leur conversion en GeoJSON. Les données importées peuvent être affichées directement comme couche sur la carte.

Installation

bash
npm install @geoleaf-plugins/file-import

API principale

js
import "@geoleaf/core";
import "@geoleaf-plugins/file-import";

// Convertir un fichier File en GeoJSON
const geojson = await GeoLeaf.FileImport.convert(file, {
  type: "auto", // détection automatique — ou "gpx", "kml", "csv", "topojson"
});

// Importer et afficher comme couche sur la carte
const layer = await GeoLeaf.FileImport.importAsLayer(file, {
  layerId: "imported-data",
  style: { color: "#e74c3c", weight: 2 },
});

Formats supportés

FormatExtensionNotes
GPX.gpxTracks, routes, waypoints → GeoJSON
KML/KMZ.kml, .kmzKMZ décompressé automatiquement
CSV.csvColonnes lat/lon configurables
TopoJSON.json, .topojsonConversion automatique → GeoJSON

Options importAsLayer

OptionTypeDéfautDescription
layerIdstringgénéréIdentifiant de la couche résultante
styleobjectdéfautStyle MapLibre GL JS appliqué à la couche
typestring"auto"Force le format ("gpx", "kml", "csv", etc.)

Plugin FlatGeobuf — @geoleaf-plugins/flatgeobuf

Licence : MIT | Registre : npmjs.org | Statut : Disponible (~20 KB gzip)

Chargement streaming de fichiers FlatGeobuf avec filtrage spatial par bounding-box (HTTP Range + index R-tree). Idéal pour des jeux de données volumineux sans serveur intermédiaire.

Installation

bash
npm install @geoleaf-plugins/flatgeobuf

API principale

js
import "@geoleaf/core";
import "@geoleaf-plugins/flatgeobuf";

// Chargement complet
const geojson = await GeoLeaf.FlatGeobuf.load("https://example.com/data.fgb");

// Chargement par bbox (HTTP Range — seules les features dans la bbox sont téléchargées)
const geojson = await GeoLeaf.FlatGeobuf.loadBbox(
  "https://example.com/data.fgb",
  { minX: 2.2, minY: 48.8, maxX: 2.5, maxY: 49.0 }
);

Configuration de source dans layers.json

json
{
  "layers": {
    "ma-couche-fgb": {
      "label": "Données terrain",
      "type": "flatgeobuf",
      "url": "https://cdn.example.com/data.fgb",
      "bbox": true
    }
  }
}
CléTypeDéfautDescription
urlstringURL du fichier .fgb (HTTPS, supporte CORS)
bboxbooleanfalseActive le chargement partiel via HTTP Range + R-tree

Plugin COG — @geoleaf-plugins/cog

Licence : Commercial | Registre : npm.pkg.github.com | Statut : Disponible (~156 KB gzip)

Lecture et affichage de Cloud Optimized GeoTIFF (COG) directement dans MapLibre GL JS. Supporte les images multi-bandes, les colorMaps LUT et l'injection de source raster personnalisée.

Installation

bash
# Accès restreint — npm.pkg.github.com (token GitHub requis)
npm install @geoleaf-plugins/cog

API principale

js
import "@geoleaf/core";
import "@geoleaf-plugins/cog";

// Ajouter une couche COG sur la carte
await GeoLeaf.COG.addLayer("https://example.com/ortho.tif", {
  layerId: "ortho",
  bands: [1, 2, 3],
  colorMap: "viridis",
  opacity: 0.85,
});

// Supprimer la couche
GeoLeaf.COG.removeLayer("ortho");

Options addLayer

OptionTypeDéfautDescription
layerIdstringgénéréIdentifiant de la couche MapLibre
bandsnumber[][1,2,3]Bandes raster à afficher (RGB)
colorMapstringnullLUT : "viridis", "gray", "rdbu", etc.
opacitynumber1Opacité de la couche (0–1)
nodatanumbernullValeur nodata à masquer

Plugin WebSocket — @geoleaf-plugins/websocket

Statut : Roadmap Q3 2026 — Plugin MIT prévu pour le suivi POI en temps réel.

Ce plugin permettra la mise à jour en temps réel des POI via WebSocket — positions live, alertes géographiques, flux IoT. La documentation de configuration sera disponible à la release.


Plugin Realtime Layer — @geoleaf-plugins/realtime-layer

Statut : Roadmap Q3 2026 — Plugin MIT pour les couches à rafraîchissement automatique.

Ce plugin permettra de définir dans layers.json des couches avec intervalle de rafraîchissement automatique (polling HTTP ou flux WebSocket). La documentation de configuration sera disponible à la release.


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. Les plugins sans clé de profil (connector, file-import, flatgeobuf, cog) ne nécessitent aucune configuration JSON — ils s'activent dès l'import. 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", "file-import", "flatgeobuf", "cog"]

// Vérifier un plugin spécifique
GeoLeaf.PluginRegistry.isLoaded("storage");     // → true / false
GeoLeaf.PluginRegistry.isLoaded("file-import");  // → true / false
GeoLeaf.PluginRegistry.isLoaded("flatgeobuf");   // → true / false
GeoLeaf.PluginRegistry.isLoaded("cog");          // → true / false

Voir aussi

Released under the MIT License.