SIG & Carto Guide

Exposer la donnée géospatiale sur le web : serveurs, APIs, tuiles et architectures

de MapServer à PMTiles — guide décisionnel 2026

Mattieu Pottier 14 min de lecture
Exposer la donnée géospatiale sur le web — serveurs, APIs, PMTiles, architectures 2026 — MP-i

On choisit les formats avec soin, on réfléchit longuement au moteur de stockage — et puis la donnée est là, propre, indexée, requêtable — et on règle la question de l'exposition en quelques heures. Un GeoServer posé rapidement, un endpoint WMS configuré par défaut, et on passe à autre chose. Le résultat est souvent fonctionnel. Il est rarement optimal. Cet article couvre les six familles d'exposition géospatiale, trente ans d'évolution en quatre ères, et donne un guide décisionnel actionnable pour choisir la bonne architecture en 2026 — que vous partiez de PostGIS, de GeoParquet ou d'un simple jeu de données statique.

4
ères historiques — 1993 à 2026
6
familles d'exposition à connaître
4
architectures de référence 2026

Pourquoi l'exposition est une décision architecturale

Stocker la donnée géospatiale dans PostGIS ou GeoParquet résout le problème du backend. Mais la donnée n'a de valeur que lorsqu'elle est consommée — par un navigateur, une application mobile, un pipeline analytique ou un rapport PDF. La couche d'exposition est le pont entre le backend de stockage et le consommateur final. Et ce pont conditionne tout le reste.

Choisir le mauvais mode d'exposition provoque des effets concrets et coûteux. Un WMS générant des images PNG à la demande là où des tuiles vectorielles pré-calculées auraient rendu la même carte dix fois plus vite. Un tile server dynamique qui sature à 50 requêtes simultanées là où PMTiles sur CDN aurait absorbé un million de requêtes par jour. Un serveur dédié à 80 €/mois là où un fichier PMTiles sur Cloudflare R2 aurait coûté moins d'un euro. Une incompatibilité client — servir du MVT à Leaflet qui ne le supporte pas nativement, ou configurer un WMS pour MapLibre qui attend du MVT.

⚠️
La dépendance silencieuse que personne ne voit

Un projet avec des données 100% self-hosted peut quand même envoyer l'IP de chaque visiteur à Mapbox ou MapTiler — si les fonts vectorielles (glyphs) et les sprites de la carte sont chargés depuis leurs CDN. C'est la dépendance RGPD la plus fréquente et la moins documentée dans les projets SIG. Le test : ouvrir les DevTools, onglet Network, et vérifier que zéro requête part vers un domaine tiers non maîtrisé au chargement de la carte.

La chaîne complète : du stockage à l'écran

LB1 a établi les formats — le substrat. LB2 a établi les moteurs de stockage — le backend. Cet article couvre les trois couches intermédiaires : le service (ce qui répond aux requêtes HTTP), le style et ses assets (style GL JSON, sprites, glyphs), et le rendu client (le moteur JavaScript dans le navigateur).

Chaîne complète — Du stockage au rendu client

Stockage PostGIS · GeoParquet PMTiles Service Martin · pygeoapi PMTiles/CDN · WMS Style + Assets Style GL JSON Sprites · Glyphs PBF Rendu client MapLibre GL JS Leaflet · OpenLayers ← cet article couvre ces trois couches →
📘

Livre Blanc LB3 — Exposer la donnée géospatiale sur le web (1993–2026)

Troisième volet de la trilogie MP-i · Historique complet · Benchmarks · Architectures · Sécurité et RGPD · Distribution libre

↓ Télécharger le PDF

Les 6 familles d'exposition géospatiale

Avant tout choix d'outil, il faut une grille de lecture. Les modes d'exposition géospatiale se répartissent en six grandes familles, chacune avec ses contraintes propres de latence, de volumétrie, d'interactivité et de coût.

Fichier statique

PMTiles · COG · FlatGeobuf

Sans serveur applicatif · HTTP Range Requests

La donnée est encapsulée dans un fichier unique servi depuis un CDN ou un stockage objet. Architecture la plus simple, la plus scalable, la moins coûteuse. Pas de filtrage dynamique côté serveur.

CDN Serverless Planet-scale
API de features

OGC API · WFS · REST custom

Filtres, pagination, sélection attributaire

Service HTTP qui répond à des requêtes avec filtres bbox, attributaires et pagination. La famille la plus interactive, la plus sensible à la charge sans cache.

Interactif Édition GeoJSON
Tile server dynamique

Martin · pg_tileserv · Tegola

PostGIS → MVT/MLT à la volée

Génère des tuiles vectorielles à la demande depuis la base de données. Architecture de référence pour les données à forte volumétrie avec mise à jour fréquente.

MVT Temps réel Cache
Rendu image serveur

WMS · WMTS · OGC API Maps

Image PNG/JPEG générée côté serveur

Architecture historique des standards OGC, encore dominante dans les portails INSPIRE européens. Aucune interactivité sur les entités individuelles. Coûteux en CPU serveur.

OGC INSPIRE Institutionnel
SaaS géré

Mapbox · MapTiler · Google Maps

Zéro ops · CDN mondial · SDK clé en main

Plateforme cloud qui gère l'intégralité de la chaîne. Idéal pour le prototypage. Coût à l'échelle, dépendance provider et implications RGPD à anticiper.

POC Vendor lock-in
Big Data / Analytique

DuckDB · BigQuery Geo · Spark Sedona

SQL spatial massif · Latence analytique

Le moteur de requête est directement exposé comme couche d'accès. Résultat : agrégat, GeoJSON filtré ou export GeoParquet. Latence analytique (secondes), pas cartographique (ms).

GeoParquet DuckDB-WASM

Les 5 critères de choix

Famille Latence Volume Interactivité Coût infra Souveraineté
Fichier statique (PMTiles/COG) ✅ Très faible ✅ Planet-scale ⚠️ Limitée ✅ Quasi nul ✅ Self-hosted
API de features (OGC/REST) ⚠️ Variable ⚠️ Limité sans cache ✅ Totale ⚠️ Serveur requis ✅ Contrôle total
Tile server dynamique ⚠️ Cache dépendant ✅ Élevé ✅ Client complet ⚠️ Serveur requis ✅ Self-hosted
Service de rendu image (WMS) ❌ Élevée (CPU) ⚠️ Avec cache précalculé ❌ Aucune ❌ Infra lourde ✅ Self-hosted
SaaS géré ✅ Excellente ✅ Illimité ⚠️ Dépend du service ✅ Zéro ops ❌ Provider
Big Data / analytique ⚠️ Latence analytique ✅ Téraoctets ✅ SQL à la volée ⚠️ Variable ✅ Self-hosted

30 ans en 4 ères

1993–2004

Serveurs cartographiques

MapServer · GeoServer · WMS · WFS

2005–2013

Web cartographique

XYZ · Leaflet · OpenLayers · Mapbox

2014–2019

APIs REST modernes

Martin · ST_AsMVT · pygeoapi · OGC API

2020–2026

Serverless cloud-native

PMTiles · MLT · TiTiler · WebGPU

Ère 1 (1993–2004) — Les serveurs cartographiques

Au milieu des années 1990, exposer une carte sur le web est une entreprise technique non triviale. Le serveur fait tout le travail de rendu, le navigateur reçoit une image. C'est dans ce contexte que naissent les deux piliers qui domineront l'exposition cartographique institutionnelle pendant vingt ans.

MapServer (1994, Université du Minnesota) est un script C qui génère des appels de rendu via une configuration déclarative — le Mapfile. Chaque requête HTTP déclenche l'exécution d'un processus C qui charge les données, effectue le rendu et retourne une image PNG. Toujours maintenu en 2026 (v8.4, janvier 2025), il occupe une niche stable dans les portails legacy et les contextes où la performance brute prime.

GeoServer (2001, The Open Planning Project, New York) adopte une philosophie radicalement différente : une application web Java avec interface d'administration graphique, conçue comme référence d'implémentation WFS. C'est lui qui structure encore en 2026 les portails INSPIRE européens.

Critère MapServer GeoServer
Langage C — très léger Java — JVM overhead
Configuration Mapfile texte Interface web complète
Performance rendu ✅ Excellente ⚠️ Correcte
OGC API moderne ⚠️ Partiel ✅ Stable (2.19+)
Cas d'usage 2026 Legacy, performance brute Portails OGC, INSPIRE

La directive européenne INSPIRE (2007), en rendant obligatoire la publication de données géographiques via WMS et WFS conformes, a créé un marché institutionnel pour ces deux outils qui perdure en 2026 — indépendamment de l'émergence d'alternatives plus modernes.

Ère 2 (2005–2013) — Le tuilage XYZ et le web cartographique

Le 8 février 2005, Google Maps est lancé aux États-Unis. Ce n'est pas simplement un nouveau service de cartographie — c'est une rupture architecturale. Deux innovations conjointes créent l'expérience de la "slippy map" : le tuilage précalculé (la carte mondiale découpée en millions d'images 256×256 px organisées par niveau de zoom) et le chargement AJAX asynchrone. Le schéma d'adressage /{z}/{x}/{y}.png devient un standard de facto sans jamais avoir fait l'objet d'une spécification OGC formelle.

Cette rupture engendre immédiatement les tile caches : TileCache (2006), MapProxy (2009-2010) — un proxy interposé devant un WMS existant qui le transforme en source de tuiles XYZ cachables sur CDN. En 2026, MapProxy reste pertinent pour les architectures hybrides qui maintiennent la compatibilité avec des WMS institutionnels legacy tout en exposant des tuiles XYZ modernes.

Côté client, deux bibliothèques structurent cette période. OpenLayers (2006, MetaCarta) vise l'exhaustivité des standards OGC — WMS, WFS, WMTS, OGC API. Leaflet (2011, Volodymyr Agafonkin) adopte l'approche inverse : faire bien le travail essentiel en 42 Ko, sans ambition OGC. Les deux restent pertinents en 2026, dans des niches différentes.

Ère 3 (2014–2019) — Tile servers modernes et APIs REST

L'arrivée de WebGL stable dans les navigateurs (fin 2013) provoque une rupture fondamentale. Si le rendu est délégué au GPU du client, le serveur n'a plus besoin de générer des images — il lui suffit d'envoyer des données vectorielles brutes encodées de façon compacte. Naît l'architecture en trois couches découplées : stockage (PostGIS), service (tile server léger), rendu (client WebGL).

Le point de jonction est ST_AsMVT, introduite dans PostGIS 2.4 (2017). Cette fonction génère directement des tuiles MVT depuis une requête SQL — PostGIS devient à la fois moteur de stockage et moteur de sérialisation. C'est la fondation technique de tous les tile servers modernes.

Critère pg_tileserv (Go) Martin v1.x (Rust) ⭐
Sources de données PostGIS uniquement ✅ PostGIS, MBTiles, PMTiles
Cache intégré ❌ Varnish requis ✅ LRU mémoire + disque
Styles / sprites / glyphs ✅ Natif
Support MLT (service) ✅ Fichiers PMTiles/MBTiles MLT
Cas d'usage Prototypage, mono-source Production, multi-sources

Martin v1.0.0 a été publié le 19 novembre 2025, après huit ans de développement et plus de 80 contributeurs. C'est le signal de maturité le plus clair de l'écosystème tile server open source. Côté APIs REST, pygeoapi (2018, certifié OGC en 2020) s'impose comme implémentation Python de référence pour OGC API Features — le successeur REST moderne de WFS, publié par l'OGC en 2019.

Ère 4 (2020–2026) — Serverless et cloud-native

La quatrième rupture ne vient pas d'un nouveau format ou d'un nouveau moteur — elle vient de l'élimination du serveur lui-même. PMTiles v3 (octobre 2022, Brandon Liu / Protomaps) est une archive binaire organisée selon la courbe de Hilbert, accessible directement par le navigateur via HTTP Range Requests depuis un stockage objet. Deux requêtes HTTP suffisent pour récupérer n'importe quelle tuile d'un fichier PMTiles couvrant un pays ou une région.

💡
PMTiles sur Cloudflare R2 — la combinaison décisive

Cloudflare R2 ne facture pas l'egress vers le réseau Cloudflare — contrairement à AWS S3 (0,09 $/Go). Un fond de carte PMTiles OpenMapTiles pour la France métropolitaine (~2 Go) hébergé sur R2 avec un CDN mondial coûte moins d'1 €/mois pour des dizaines de milliers d'utilisateurs. La même infrastructure sur S3 avec CloudFront peut coûter 15 à 30 fois plus.

PMTiles est format-agnostique : le même conteneur peut accueillir des tuiles MVT, MLT (MapLibre Tile, spécification stable octobre 2025, annonce publique 23 janvier 2026) ou raster. MLT est un format à encodage column-oriented qui offre une compression jusqu'à 6× supérieure à MVT et des transferts CPU→GPU plus efficaces pour WebGPU. Son support est disponible dans MapLibre GL JS depuis la version 5.12 (novembre 2025). Côté génération, Planetiler intégrera MLT dans une prochaine release — l'écosystème n'est pas encore complet mais la direction est claire.

Moteurs de rendu client et implications serveur

Le choix du moteur de rendu client n'est pas un détail frontend. Il détermine les formats que le serveur doit produire — et rend inutile une infrastructure inadaptée. La règle d'or : choisir le client avant le serveur.

Critère Leaflet OpenLayers MapLibre GL JS ⭐ Mapbox GL JS
Rendu Canvas/SVG Canvas/WebGL WebGL/WebGPU WebGL
MVT natif ⚠️ Plugin ✅ OL6+ ✅ Natif ✅ Natif
MLT ✅ v5.12+
PMTiles natif ⚠️ Plugin ⚠️ Plugin ✅ Natif ⚠️ v3+
OGC natif ⚠️ Plugin ✅ Excellent ⚠️ Limité
Licence BSD-2 BSD-2 MIT Mapbox ToS (propriétaire)
Backend naturel WMS · XYZ · GeoJSON GeoServer · pygeoapi Martin · PMTiles · MLT Mapbox · PMTiles

L'antipattern le plus fréquent : déployer Martin pour servir du MVT à un client Leaflet qui ne le supporte pas nativement. Leaflet consomme WMS, XYZ raster et GeoJSON — un tile server MVT est superflu. Inversement, configurer un WMS pour MapLibre GL JS qui attend du MVT produit une carte fonctionnelle mais dégradée en termes de performance et d'interactivité.

MapLibre GL JS s'est imposé comme moteur de référence pour les nouvelles applications self-hosted depuis le changement de licence de Mapbox GL JS en décembre 2020. Son support natif de PMTiles et MLT, combiné à sa gouvernance open source (organisation MapLibre, financement AWS et autres), en fait le choix par défaut pour toute nouvelle application cartographique web sans contrainte OGC stricte.

La souveraineté : l'angle oublié

Sur un projet récent en prestation, l'audit de conformité RGPD d'une application cartographique "100% self-hosted" révèle deux dépendances silencieuses : les fonts PBF (glyphs) chargées depuis api.mapbox.com, et les sprites depuis api.maptiler.com. Résultat : l'IP de chaque visiteur était transmise à ces deux providers à chaque chargement de carte — sans apparaître nulle part dans la politique de confidentialité. Zéro donnée métier exposée, mais traitement de données personnelles non déclaré.

🚫
Les 3 dépendances silencieuses à auditer

Glyphs PBF — fonts vectorielles chargées par MapLibre pour les labels. Si l'URL dans le style JSON pointe vers api.mapbox.com ou api.maptiler.com, chaque requête de label transmet l'IP du visiteur. Sprites — même problème si la spritesheet est hébergée chez un tiers. Tuiles de fond — si le fond de carte OSM est fourni par un SaaS tiers plutôt qu'OpenMapTiles self-hosted, chaque tuile vue expose l'IP et la zone consultée.

Audit — Dépendances silencieuses cartographiques

  • Ouvrir DevTools → Network → filtrer par domaine au chargement de la carte
  • Vérifier que zéro requête part vers mapbox.com, maptiler.com, googleapis.com non déclarés
  • Glyphs auto-hébergés depuis openmaptiles/fonts ou Martin
  • Sprites auto-hébergées depuis openmaptiles/maptiler-basic-gl-style
  • Fond de carte : OpenMapTiles PMTiles sur R2 ou MapTiler Server local

La correction est simple et sans coût : héberger les glyphs sur son propre serveur ou sur R2 (dossier statique de ~50 Mo pour les fonts open source courantes — Noto Sans, Open Sans, Roboto), et pointer le style JSON vers cette URL. Martin peut également servir les glyphs directement depuis sa configuration YAML pour une stack entièrement consolidée.

Guide décisionnel : choisir son architecture

Trois questions suffisent à orienter 90% des choix d'architecture d'exposition géospatiale. Elles se posent dans l'ordre — et la réponse à chacune peut clore le processus.

01

Quel moteur de rendu client ?

Leaflet → WMS/XYZ/GeoJSON (tile server MVT inutile). OpenLayers → GeoServer/pygeoapi. MapLibre GL JS → continuer.

02

Les données changent-elles souvent ?

Plus d'une fois par heure → tile server dynamique (Martin). Moins souvent → PMTiles sur CDN. Simple et décisif.

03

Interopérabilité OGC requise ?

INSPIRE, conformité OGC formelle → GeoServer + pygeoapi. Sinon → stack optimisée Martin + FastAPI.

04

Volume et budget ?

< 5 000 entités → GeoJSON + API REST. Gros volumes stables → PMTiles. Temps réel haute perf. → Martin avec cache.

Arbre de décision — Architecture d'exposition géospatiale (MapLibre GL JS)

MapLibre GL JS retenu Données mises à jour > 1×/heure ? OUI Martin Tile server dynamique PostGIS + ST_AsMVT NON OGC / INSPIRE requis ? OUI GeoServer + pygeoapi OGC API Tiles/Features NON Volume > 100 000 entités ? NON GeoJSON FastAPI ou pygeoapi Simple et suffisant OUI PMTiles sur Cloudflare R2 MVT (stable) · MLT si WebGPU prioritaire Scalable · < 5 €/mois · CDN mondial

4 architectures de référence 2026

Légère

Application ou carte d'information

POI, données statiques, forte volumétrie avec mises à jour rares. Budget minimal.

PostGIS → Tippecanoe
PMTiles sur Cloudflare R2
MapLibre GL JS

Carte touristique, portail open data léger, POC · < 5 €/mois

Métier

Portail avec données dynamiques

Données mises à jour fréquemment, interactivité requise, usage interne ou professionnel.

PostGIS + ST_AsMVT
Martin v1.x + cache LRU
MapLibre GL JS

GMAO cartographique, SIG terrain, gestion d'actifs · 25–60 €/mois

Institutionnel

Portail OGC / INSPIRE

Conformité OGC formelle, WFS transactionnel, interopérabilité QGIS/ArcGIS requise.

PostGIS ou GeoPackage
GeoServer 2.x + pygeoapi
OpenLayers

Portail INSPIRE, open data collectivité, SIG communal · 40–80 €/mois

Scalable

Open data national ou platform

Millions d'entités, forte audience, zéro dépendance externe, RGPD strict.

PostGIS → Planetiler → PMTiles
R2 + CDN · Martin (dynamique)
MapLibre GL JS + glyphs/sprites self-hosted

Portail national, open data territorial, zéro tiers · Variable selon trafic

Comparatif coûts réels — exposition mensuelle

PMTiles sur R2 (petit projet)
< 1 €
PMTiles sur R2 (projet moyen)
3–5 €
Martin sur VPS 2 vCPU
20–30 €
GeoServer dédié + stockage
50–80 €
SaaS Mapbox (1M map loads)
~250 $+

Ce qui arrive : tendances 2026–2030

MLT va progressivement compléter MVT dans les nouveaux projets haute performance. La spécification est stable (octobre 2025), MapLibre GL JS le supporte depuis v5.12, Martin sert les fichiers MLT existants. Il manque encore Planetiler stable pour la génération — attendu en 2026. La migration des productions existantes n'est pas recommandée avant stabilisation complète de l'écosystème de génération.

DuckDB-WASM ouvre une voie radicalement nouvelle : l'analytique géospatiale directement dans le navigateur, sans serveur, en interrogeant des fichiers GeoParquet depuis S3 ou R2 via HTTP Range Requests. Encore expérimental mais fonctionnel, c'est une piste sérieuse pour les tableaux de bord analytiques sans infrastructure backend.

WebGPU est disponible depuis Chrome 113 (mai 2023) et Safari 26 (automne 2025). MapLibre GL JS explore activement un backend WebGPU qui offrirait de meilleures performances pour les rendus complexes et les compute shaders géospatiaux. L'impact sur les architectures d'exposition sera surtout côté format — MLT et son encodage column-oriented est optimisé pour les transferts CPU→GPU de WebGPU.

OGC API Tiles (standard approuvé novembre 2022) gagne en adoption dans les nouvelles implémentations GeoServer et pygeoapi. Sa séparation protocole/format permet de migrer de MVT à MLT côté serveur sans modifier les clients — un argument architectural décisif pour les projets à long terme.

La couche d'exposition n'est pas un détail d'implémentation. C'est une décision qui se prend avant d'écrire le moindre code frontend — et qui conditionne la performance, le coût, la souveraineté et la maintenabilité de l'ensemble de la stack pour les années qui suivent.

— Mattieu Pottier, MP-i — Mattieu Pottier Indépendant

📘

Livre Blanc LB3 complet — Exposer la donnée géospatiale sur le web

Sécurité, CORS, RLS multi-tenant, DuckDB-WASM, rendu SSR, SaaS comparatif · Distribution libre