WMS, WFS et MapServer : exposer des données géographiques en services web interopérables
Comment publier vos couches géographiques en respectant les standards OGC, avec une stack open source éprouvée.
Les portails de données ouvertes publient de plus en plus de données géographiques : limites administratives, réseaux de transport, occupation des sols, points d’intérêt. Mais un fichier Shapefile ou GeoJSON téléchargeable ne suffit plus : les utilisateurs attendent des services web qu’ils peuvent interroger dynamiquement, intégrer dans leurs propres applications cartographiques, et superposer à d’autres couches. C’est exactement ce que permettent les standards WMS et WFS, implémentés par MapServer.
WMS et WFS : deux standards complémentaires
L’Open Geospatial Consortium (OGC) définit deux protocoles fondamentaux pour la diffusion de données géographiques sur le web :
| Standard | Type de réponse | Usage principal |
|---|---|---|
| WMS (Web Map Service) | Image (PNG, JPEG) | Affichage cartographique — le serveur génère une image de la carte à la volée |
| WFS (Web Feature Service) | Données vecteur (GML, GeoJSON) | Accès aux données brutes — le client reçoit les géométries et attributs pour les exploiter |
En pratique, WMS sert l’affichage (fonds de carte, couches de visualisation) tandis que WFS sert l’analyse (téléchargement sélectif, filtrage spatial, intégration dans un SIG). Un portail open data complet propose idéalement les deux pour chaque jeu de données géographique.
Et WMTS ? Le Web Map Tile Service (WMTS) est une variante tuilée de WMS, optimisée pour la performance. Au lieu de générer une image à chaque requête, le serveur pré-génère des tuiles à différentes échelles. C’est le standard derrière les fonds de carte rapides comme ceux d’OpenStreetMap. MapServer le supporte nativement via MapCache.
MapServer : le moteur cartographique de référence
MapServer est un serveur cartographique open source maintenu depuis 1996 par l’OSGeo. Il lit des sources de données variées (Shapefile, PostGIS, GeoPackage, GeoTIFF, WFS distant…) et les expose en services WMS, WFS, WCS et OGC API Features. Sa configuration repose sur un fichier texte appelé mapfile (.map), qui décrit les couches, leur symbolisation, les projections et les métadonnées du service.
Ses atouts principaux :
- Performance : écrit en C, il gère des volumes importants de données vecteur et raster avec une empreinte mémoire faible.
- Standards OGC : conformité testée et certifiée pour WMS 1.3.0, WFS 2.0, et OGC API Features.
- Maturité : 30 ans de production dans des contextes institutionnels (IGN, Eurostat, portails régionaux).
- Intégration Docker : des images officielles permettent un déploiement conteneurisé en quelques minutes.
Exemple de mapfile minimal
Voici un mapfile qui expose une couche PostGIS de communes en WMS et WFS :
MAP
NAME "portail_geodata"
STATUS ON
SIZE 800 600
EXTENT -5.5 41.0 10.0 51.5
UNITS DD
WEB
METADATA
"wms_title" "Portail géographique open data"
"wms_onlineresource" "https://geo.monportail.fr/mapserv?"
"wms_srs" "EPSG:4326 EPSG:3857 EPSG:2154"
"wfs_title" "Service WFS open data"
"wfs_onlineresource" "https://geo.monportail.fr/mapserv?"
"wfs_srs" "EPSG:4326 EPSG:2154"
END
END
PROJECTION
"init=epsg:4326"
END
LAYER
NAME "communes"
TYPE POLYGON
STATUS ON
CONNECTIONTYPE POSTGIS
CONNECTION "host=db dbname=geodata user=reader password=secret"
DATA "geom FROM communes USING UNIQUE id USING SRID=2154"
METADATA
"wms_title" "Communes"
"wfs_title" "Communes"
"gml_include_items" "all"
"gml_featureid" "id"
END
PROJECTION
"init=epsg:2154"
END
CLASS
NAME "Commune"
STYLE
OUTLINECOLOR 80 80 120
COLOR 220 220 240
END
END
END
END
Ce mapfile produit deux services accessibles par URL :
?SERVICE=WMS&REQUEST=GetMap&LAYERS=communes&...— renvoie une image PNG de la carte?SERVICE=WFS&REQUEST=GetFeature&TYPENAMES=communes&OUTPUTFORMAT=geojson— renvoie les géométries en GeoJSON
Déploiement Docker avec Nginx
Un déploiement typique couple MapServer avec Nginx en reverse proxy. Nginx gère le TLS, le cache des tuiles WMS, et le rate limiting pour protéger le service :
version: "3.9"
services:
mapserver:
image: camptocamp/mapserver:8.0
volumes:
- ./mapfiles:/etc/mapserver
- ./data:/data
environment:
MS_MAPFILE: /etc/mapserver/portail.map
nginx:
image: nginx:alpine
ports: ["443:443"]
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certs:/etc/nginx/certs
depends_on:
- mapserver
La configuration Nginx ajoute un cache proxy pour les requêtes WMS GetMap (qui sont idempotentes) et laisse passer les requêtes WFS sans cache :
proxy_cache_path /var/cache/nginx/wms levels=1:2
keys_zone=wms_cache:10m max_size=1g
inactive=24h use_temp_path=off;
location /mapserv {
# Cache WMS GetMap
proxy_cache wms_cache;
proxy_cache_valid 200 24h;
proxy_cache_key "$request_uri";
proxy_pass http://mapserver:80/cgi-bin/mapserv;
proxy_set_header Host $host;
}
Intégration avec CKAN
CKAN dispose de l’extension ckanext-spatial qui permet d’indexer et de rechercher les jeux de données géographiques par emprise spatiale. Pour aller plus loin, on peut référencer les endpoints WMS et WFS comme ressources d’un jeu de données CKAN :
- Une ressource de type
wmsavec l’URL du service — CKAN affiche automatiquement un aperçu cartographique via le plugin de prévisualisation. - Une ressource de type
wfspour le téléchargement filtré — les utilisateurs avancés peuvent interroger le WFS directement depuis QGIS ou un script Python. - Les fichiers bruts (GeoPackage, Shapefile) restent disponibles en téléchargement classique pour ceux qui préfèrent travailler hors ligne.
Astuce CKAN : L’extension ckanext-geoview permet d’afficher directement les couches WMS dans l’interface CKAN via OpenLayers. L’utilisateur voit un aperçu interactif sans quitter le portail.
OGC API Features : le successeur moderne de WFS
L’OGC travaille depuis plusieurs années sur une nouvelle génération de standards, plus proches des conventions REST et JSON. OGC API Features (anciennement WFS 3.0) remplace progressivement WFS 2.0 :
- URLs lisibles et RESTful :
/collections/communes/items?bbox=2.3,48.8,2.4,48.9 - Réponses en GeoJSON par défaut (plus de GML obligatoire)
- Documentation OpenAPI automatique
- Pagination native et filtrage CQL
MapServer 8.x implémente OGC API Features nativement. Il suffit d’ajouter les métadonnées appropriées dans le mapfile pour activer le endpoint REST en parallèle du WFS classique. Cela permet une transition progressive sans casser les clients existants.
Points de vigilance
- Projections : assurez-vous que vos couches sont servies dans les systèmes de coordonnées attendus. En France, EPSG:2154 (Lambert-93) pour les données métropolitaines, EPSG:4326 et EPSG:3857 pour la compatibilité web.
- Performance WFS : un WFS sans filtre sur un jeu de données volumineux peut saturer le serveur. Limitez le nombre de features retournées par défaut (
wfs_maxfeatures) et ajoutez des index spatiaux sur les tables PostGIS. - Sécurité : ne publiez jamais les chaînes de connexion PostGIS dans les métadonnées du service. MapServer les garde côté serveur, mais vérifiez que le GetCapabilities ne les expose pas.
- Monitoring : supervisez les temps de réponse WMS. Un GetMap qui dépasse 2 secondes dégrade fortement l’expérience utilisateur dans un viewer cartographique.
Récapitulatif
MapServer avec WMS et WFS reste la solution de référence pour publier des données géographiques ouvertes en services web interopérables. Couplé à PostGIS pour le stockage, Nginx pour la diffusion, et CKAN pour le catalogage, il forme une stack complète et éprouvée. L’arrivée d’OGC API Features modernise l’interface sans remettre en cause l’architecture, ce qui permet une adoption progressive et sans risque.
Contactez-nous pour réaliser des modules CKAN OGC sur mesure.
