Chapitre 8
CARTOGRAPHIE NUMERIQUE ET VALORISATION DES CARTES (partie 4/4)
Lecture : 25 minQuiz de 10 questions
## Objectifs et prérequis
**À la fin de ce chapitre, l’élève sera capable de :**
- Définir la webcartographie et distinguer ses principaux protocoles (WMS, WMTS, WFS, WCS).
- Expliquer l’architecture client‑serveur d’une application de cartographie en ligne.
- Installer et configurer une solution open‑source de WebMapping (GeoServer, QGIS Server ou MapServer) pour publier un service WMS.
- Utiliser une bibliothèque JavaScript (Leaflet ou OpenLayers) pour créer une carte interactive intégrant des couches vectorielles et raster.
- Appliquer les règles de design cartographique (symbologie, hiérarchie visuelle, légende, échelle nord, crédits) afin de produire une carte lisible, esthétique et adaptée à un public cible.
- Réaliser, en situation professionnelle, une carte thématique du territoire camerounais (réseaux d’eau, zones agricoles, risques naturels) et en assurer la mise en ligne.
**Prérequis :**
- Notions de SIG de base (systèmes de coordonnées, projections, types de données géospatiales).
- Maîtrise des logiciels de bureau QGIS (version ≥ 3.28) pour la préparation des données.
- Connaissances élémentaires en HTML/CSS et en JavaScript (fonctions, manipulation du DOM).
- Notions de sécurité informatique de base (authentification, contrôle d’accès aux services).
---
## Introduction contextualisée
Au Cameroun, la demande de géoinformation en temps réel augmente dans les secteurs de l’urbanisme, de l’agriculture, de la gestion des ressources en eau et de la prévention des risques naturels. Les collectivités territoriales, les ministères (MINEPAT, MINEE, MINADER) et les opérateurs privés ont besoin de cartes interactives accessibles depuis un navigateur, sans installation de logiciel lourd. La webcartographie répond à ce besoin en diffusant des données géospatiales via des services web normalisés (OGC) et en les visualisant grâce à des bibliothèques cartographiques légères.
Ce chapitre s’inscrit dans la logique du programme officiel MINESEC/IGE qui privilégie l’approche par compétences : l’élève doit non seulement connaître les concepts, mais aussi les mettre en œuvre dans un contexte professionnel camerounais (ex. : cartographie du réseau d’adduction d’eau potable de la ville de Douala, suivi des parcelles agricoles du bassin du Logone).
---
## I. WEBCARTOGRAPHIE (Leçon 20)
### 1. Définition et principes
> **Webcartographie** : ensemble de techniques permettant la création, la publication et l’interaction avec des cartes géographiques via Internet, en s’appuyant sur des protocoles ouverts définis par l’Open Geospatial Consortium (OGC).
Les principes fondamentaux sont :
- **Séparation des données et de la présentation** : les données géospatiales restent stockées sur un serveur ; le client ne reçoit que les tuiles ou les vecteurs nécessaires à l’affichage.
- **Interopérabilité** : les services respectent les standards WMS (Web Map Service), WMTS (Web Map Tile Service), WFS (Web Feature Service) et WCS (Web Coverage Service).
- **Scalabilité** : le serveur peut servir des milliers de requêtes simultanées grâce à la mise en cache des tuiles (ex. : TileCache, GeoWebCache).
### 2. Architecture client‑serveur
| Composant | Rôle | Technologies fréquentes au Cameroun |
|-----------|------|--------------------------------------|
| **Serveur de données** | Héberge les jeux de données (PostGIS, Shapefile, GeoPackage) et expose les services OGC. | PostgreSQL/PostGIS, GeoServer, QGIS Server, MapServer |
| **Serveur de tuiles** (optionnel) | Génère et sert des tuiles raster pré‑calculées pour un rendu rapide. | GeoWebCache, TileStache, MBTiles |
| **Client web** | Affiche la carte, gère l’interaction (zoom, pan, sélection) et interroge les services. | HTML/CSS/JS + Leaflet, OpenLayers, Mapbox GL JS |
| **Proxy / passerelle de sécurité** (optionnel) | Filtre les requêtes, applique l’authentification (OAuth2, JWT) et limite le débit. | Nginx, Apache mod_security, Keycloak |
> **Règle de sécurité** : tout service WMS/WFS publié sur Internet doit être placé derrière un pare‑feu applicatif qui autorise uniquement les méthodes GET/POST nécessaires et qui journalise les accès afin de détecter les tentatives d’injection (ex. : requêtes malformées visant à exécuter du code sur le serveur).
### 3. Formats de données et protocoles OGC
- **WMS** : retourne une image (PNG, JPEG, SVG) représentant une carte selon les paramètres SRS, BBOX, WIDTH, HEIGHT.
- **WMTS** : fournit des tuiles pré‑générées (256×256 px) indexées par niveau de zoom, colonne et ligne ; idéal pour les bases de fond (OpenStreetMap, Sentinel‑2).
- **WFS** : permet le téléchargement de géométrie vectorielle sous forme de GML ou GeoJSON ; utile pour l’édition ou l’analyse côté client.
- **WCS** : sert des couvertures raster (ex. : modèles numériques de terrain) avec possibilité de sous‑échantillonnage et de ré‑projection.
> **Formule de calcul du nombre de tuiles** pour un niveau de zoom *z* (WMTS, échelle Web Mercator) :
> \[
> N_{tuiles} = 2^{z} \times 2^{z}
> \]
> Exemple : à *z* = 12, le serveur doit pouvoir fournir 2²⁴ = 16 777 216 tuiles pour couvrir le monde entier (en pratique, seules les tuiles intersectant la zone d’intérêt sont générées).
### 4. Outils de visualisation côté client
- **Leaflet** : bibliothèque légère (~ 42 KB gzipped), API simple, vaste écosystème de plugins (markerCluster, heat, draw).
- **OpenLayers** : plus complète, supporte les projections complexes, les vecteurs stylés via OL‑style, et la lecture directe de WFS/WMS.
- **Mapbox GL JS** : rendu WebGL, adapté aux grandes quantités de données vectorielles avec styles dynamiques (nécessite un compte Mapbox ou un serveur de tiles vectorielles).
> **Bonnes pratiques de développement** : séparer le HTML (structure), le CSS (apparence) et le JS (logique) ; utiliser des fichiers de configuration JSON pour définir les couches de base et les services OGC afin de faciliter la maintenance.
### 5. Exemple professionnel : carte interactive du réseau d’adduction d’eau potable de Yaoundé
**Contexte** : la CAMWATER (Société Nationale des Eaux du Cameroun) souhaite mettre à disposition des collectivités locales une carte montrant les conduites principales, les réservoirs et les points de fuite détectés.
**Étapes de réalisation** :
1. **Préparation des données** (QGIS) :
- Importer le shapefile du réseau d’eau (EPSG : 4326).
- Nettoyer les géométries (supprimer les doublons, corriger les self‑intersections).
- Créer un champ `débit` (L/s) et un champ `état` (bon, fuite, à remplacer).
- Exporter en GeoPackage (`reseau_eau.gpkg`).
2. **Publication du service WMS** (GeoServer) :
- Créer un workspace `camwater`.
- Ajouter un magasin de données `GeoPackage` pointant vers `reseau_eau.gpkg`.
- Publier une couche `reseau_eau` en tant que WMS.
- Définir un style SLD : lignes bleu épais pour les conduites principales, points rouges pour les fuites, carrés bleus pour les réservoirs.
- Activer le caching avec GeoWebCache (niveaux de zoom 8‑15).
3. **Développement du client** (Leaflet) :
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Réseau d’eau – Yaoundé</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
<style>#map{height:100vh;}</style>
</head>
<body>
<div id="map"></div>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script>
const map = L.map('map').setView([3.8667, 11.5167], 13);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
const wmsLayer = L.tileLayer.wms('http://geoserver.example.com/geoserver/camwater/wms', {
layers: 'camwater:reseau_eau',
format: 'image/png',
transparent: true,
version: '1.1.1'
}).addTo(map);
</script>
</body>
</html>
```
- Le fichier HTML est placé sur un serveur web (Apache/Nginx) accessible en interne à la CAMWATER.
- Un formulaire de recherche (plugin Leaflet.Search) permet à l’opérateur de saisir un numéro de parcelle et de zoomer sur la conduite correspondante.
**Résultat** : une carte interactive, consultable depuis n’importe quel navigateur, mettant en évidence les zones à risque de fuite et facilitant la planification des interventions de maintenance.
---
## II. Quelques Solutions WebMapping open sources (Leçon 21)
### 1. QGIS Server / QGIS Web Client
- **QGIS Server** : implémente les services WMS, WMTS, WFS, WCS à partir d’un projet QGIS (.qgz).
- **Avantages** : réutilisation directe des symbologies QGIS, support complet des expressions, facilité de déploiement via Docker.
- **Inconvénients** : performances moindres que GeoServer pour de très gros rasters, moins d’options de fine‑tuning du caching.
### 2. GeoServer
- **GeoServer** : serveur Java basé sur GeoTools, référence pour les services OGC.
- **Points forts** :
- Gestion avancée des couvertures raster (mosaïques, pyramides).
- Intégration native avec PostGIS et les magasins de fichiers (Shapefile, GeoTIFF, NetCDF).
- Module de sécurité Spring Security (authentification LDAP, JWT, OAuth2).
- GeoWebCache intégré pour le tuilage WMTS.
- **Déploiement typique au Cameroun** : serveur Ubuntu 22.04 LTS, Java 17, Tomcat 10, GeoServer 2.24.x.
### 3. MapServer
- **MapServer** : moteur de rendu cartographique écrit en C, très performant pour la génération d’images raster (PNG, JPEG, TIFF).
- **Utilisation** : idéal lorsqu’on a besoin uniquement de WMS/WFS avec un faible empreinte mémoire (ex. : serveurs embarqués dans des centres de données régionaux).
- **Limites** : moins de fonctionnalités avancées que GeoServer (ex. : pas de support natif du WMTS, gestion des styles via fichier .map moins intuitive).
### 4. Tableau comparatif
| Critère | QGIS Server | GeoServer | MapServer |
|---------|-------------|-----------|-----------|
| Langage | C++/Python (via QGIS) | Java | C |
| Installation | Docker, paquet OS | WAR/Tomcat, Docker | binaire, paquet OS |
| Services OGC | WMS, WMTS, WFS, WCS | WMS, WMTS, WFS, WCS | WMS, WFS, WCS |
| Symbologie | héritée du projet QGIS | SLD, CSS, boîte de style | fichier .map |
| Performance raster | bonne (via GDAL) | excellente (caching, pyramides) | très bonne (rendement brut) |
| Communauté | forte (QGIS) | très active (OSGeo) | modeste mais stable |
| Exemple d’usage camerounais | Cartographie des sols du Nord (projet MINADER) | Portail géospatial du MINEE (suivi des barrages) | Application interne de suivi des routes (MINTP) |
### 5. Mise en place d’un service WMS avec GeoServer (pas à pas)
> **Étape 1 – Installation** :
> ```bash
> sudo apt update
> sudo apt install openjdk-17-jre-headless tomcat10
> wget https://sourceforge.net/projects/geoserver/files/GeoServer/2.24.0/geoserver-2.24.0-war.zip
> unzip geoserver-2.24.0-war.zip -d /var/lib/tomcat10/webapps/geoserver
> sudo systemctl restart tomcat10
> ```
> Accéder à `http://serveur:8080/geoserver/web/` (identifiant admin / mot de passe défini lors du premier lancement).
> **Étape 2 – Création d’un workspace** :
> - Menu *Workspaces* → *Add new workspace* → Nom : `minée`, URI : `http://xn--min-9qa.cm`.
> **Étape 3 – Ajout d’un magasin de données** :
> - *Stores* → *Add new Store* → Type : *PostGIS* → Nom : `barrages` → Paramètres de connexion (host, port, database, user, password).
> **Étape 4 – Publication d’une couche** :
> - *Layers* → *Add a new resource* → Sélectionner le magasin `barrages` → Choisir la table `ouvrages` → Publier.
> - Dans l’onglet *Publishing*, définir les *SRS* (EPSG:4326) et la *Bounding Box* extraite des données.
> **Étape 5 – Style (SLD)** :
> - Créer un fichier `.sld` :
> ```xml
> <StyledLayerDescriptor version="1.0.0"
> xmlns="http://www.opengis.net/sld"
> xmlns:ogc="http://www.opengis.net/ogc">
> <NamedLayer>
> <Name>barrages</Name>
> <UserStyle>
> <Title>Style barrages</Title>
> <FeatureTypeStyle>
> <Rule>
> <PointSymbolizer>
> <Graphic>
> <Mark>
> <WellKnownShape>square</WellKnownShape>
> <Fill>
> <CssParameter name="fill">#0066CC</CssParameter>
> </Fill>
> </Mark>
> <Size>12</Size>
> </Graphic>
> </PointSymbolizer>
> </Rule>
> </FeatureTypeStyle>
> </UserStyle>
> </NamedLayer>
> </StyledLayerDescriptor>
> ```
> - Dans l’onglet *Style* de la couche, choisir *Upload a style file* et valider.
> **Étape 6 – Test du service WMS** :
> - Ouvrir *Layer Preview* → choisir `minée:barrages` → format `OpenLayers`.
> - Vérifier que les points apparaissent correctement et que le GetMap renvoie une image PNG.
> **Étape 7 – Sécurisation** :
> - Activer le filtre *Service Security* → définir un rôle `viewer` avec droit `READ` sur l’espace de travail `minée`.
> - Dans *Tomcat*, configurer un *Valve* `RemoteAddrValve` pour restreindre l’accès aux plages IP du ministère (ex. : `10.0.0.0/8`).
> **Règle de sécurité** : ne jamais laisser le compte admin avec le mot de passe par défaut (`geoserver`) en production ; le changer immédiatement après la première connexion et appliquer une politique de rotation tous les 90 jours.
---
## III. Design et habillage d’une carte (Leçon 22)
### 1. Principes de cartographie visuelle
- **Hiérarchie visuelle** : les éléments les plus importants (thème principal, légende, titre) doivent attirer l’œil en premier.
- **Contraste et lisibilité** : utiliser des couleurs avec un contraste suffisante (ratio ≥ 4,5:1 pour texte sur fond, conforme aux WCAG 2.1 AA).
- **Simplicité** : éviter la surcharge ; chaque symbole ou texte doit apporter une information utile.
- **Cohérence** : appliquer les mêmes règles de symbologie (épaisseur, taille, couleur) à toutes les couches du même type.
> **Règle d’or** : une carte doit être lisible à première vue sans nécessiter de légende explicative pour chaque symbole ; la légende ne sert qu’à confirmer ou préciser.
### 2. Choix des symbologies, couleurs, échelles
- **Symbologie vectorielle** :
- Lignes : épaisseur proportionnelle à l’importance (ex. : autoroute = 2 pt, route régionale = 1 pt, piste = 0,5 pt).
- Polygones : remplissage avec des motifs ou des couleurs unies ; éviter les motifs trop détaillés qui provoquent du bruit visuel.
- Points : symbole adapté au phénomène (ex. : cercle pour puits, carré pour écoles, triangle pour centres de santé).
- **Palettes de couleurs** :
- Utiliser des palettes perceptuellement uniformes (ex. : *Viridis*, *Cividis*) pour les données continues (altitude, pluviométrie).
- Pour les données qualitatives, privilégier des teintes distinctes (ex. : palette *Set2* de ColorBrewer).
- Éviter le rouge/vert seul pour les daltoniens ; ajouter un contraste de luminosité ou un motif.
- **Échelle** :
- Indiquer l’échelle numérique (ex. : 1 : 50 000) et/ou une échelle graphique.
- Adapter l’échelle à l’usage : une carte de plan d’urbanisme urbain utilise souvent 1 : 5 000 à 1 : 10 000 ; une carte régionale du Cameroun peut être à 1 : 500 000.
> **Exemple de calcul d’échelle graphique** : pour une carte à l’échelle 1 : 100 000, 1 cm sur la carte représente 1 km sur le terrain. Une échelle graphique de 10 cm correspond donc à 10 km.
### 3. Légende, échelle nord, crédits
- **Légende** : placée généralement en bas‑à‑droite ou en bas‑à‑gauche ; encadrée, avec un titre clair (« Légende »). Chaque entrée comprend le symbole et sa description.
- **Échelle nord** : symbole simple (flèche) orienté vers le haut de la carte ; indiquer la déclinaison magnétique si nécessaire (ex. : pour le Nord‑Caméroun, déclinaison ≈ 2° Ouest).
- **Crédits** : mentionner la source des données (ex. : « Données : MINEE, 2023 ; Traitement : ONG GeoCam »), la date de production et le système de projection utilisé (ex. : « Projection : WGS 84 / UTM zone 32N »).
### 4. Accessibilité et lisibilité
- **Contraste** : vérifier avec un outil (ex. : WebAIM Contrast Checker) que le texte sur fond de carte respecte le ratio AA.
- **Polices** : utiliser des sans‑serif lisibles (Arial, Helvetica, Open Sans) ; taille minimale 10 pt pour l’impression, 12 pt pour l’écran.
- **Interaction** : si la carte est web, prévoir un mode « high contrast » activable via un bouton ; garantir la navigation au clavier (tabulation, touches fléchées).
- **Texte alternatif** : fournir une description succincte de la carte dans l’attribut `aria-label` ou dans un élément `<figcaption>` pour les utilisateurs de lecteurs d’écran.
### 5. Exercice de habillage : carte des zones agricoles du Littoral (Cameroun)
**Objectif** : produire une carte thématique montrant les principales cultures (banane, palmier à huile, cacao) dans la région du Littoral, à l’échelle 1 : 250 000, prête à être publiée en tant que service WMS.
**Étapes** :
1. **Collecte et préparation des données** (QGIS) :
- Télécharger le shapefile des limites administratives du Littoral depuis le géoportail du MINATD.
- Importer les parcelles agricoles issues du recensement MINADER 2022 (format GeoPackage).
- Effectuer un joint attributaire pour ajouter le champ `culture_principale`.
- Réprojeter le tout en UTM zone 32N (EPSG : 32632) pour préserver les distances.
2. **Symbologie** :
- Créer trois catégories selon `culture_principale` :
- Banane → remplissage `#2E8B57` (vert mer) avec contour noir 0,5 pt.
- Palmier à huile → remplissage `#FFD700` (or) avec contour noir 0,5 pt.
- Cacao → remplissage `#8B4513` (saddle brown) avec contour noir 0,5 pt.
- Utiliser un rendu *categorized* avec une légende explicite.
3. **Éléments de mise en page** (mise en page QGIS) :
- Ajouter un titre : « Répartition des cultures principales dans la région du Littoral – Cameroun ».
- Insérer une échelle numérique (1 : 250 000) et une échelle graphique (barre de 0 à 50 km).
- Placer une flèche nord en haut‑à‑gauche.
- Ajouter une légende en bas‑à‑droite, avec un fond semi‑transparent blanc (opacity = 80 %).
- Crédits : « Source : MINADER, recensement agricole 2022 ; Traitement : unité de géomatique, Lycée Technique de Douala ».
4. **Export** :
- Exporter en PDF haute résolution (300 dpi) pour impression.
- Exporter en PNG (150 dpi) pour intégration dans un portail web.
5. **Publication en tant que WMS** (GeoServer) :
- Créer un magasin de données pointing vers le GeoPackage exporté.
- Publier la couche `littoral_cultures`.
- Appliquer le même SLD que celui utilisé dans QGIS (exporté via *Style → Export SLD*).
- Tester avec GetMap : `http://geoserver.example.com/geoserver/littoral/wms?service=WMS&version=1.1.1&request=GetMap&layers=littoral:littoral_cultures&styles=&bbox=8.5,3.5,10.5,5.5&width=800&height=600&srs=EPSG:32632&format=image/png`.
**Résultat attendu** : une carte claire où chaque culture est immédiatement identifiable grâce à des couleurs contrastées, accompagnée d’une légende, d’une échelle nord et de crédits permettant une utilisation professionnelle (rapport MINADER, présentation auprès des coopératives agricoles).
---
## Synthèse du chapitre
- **Webcartographie** : diffusion de données géospatiales via services OGC (WMS, WMTS, WFS, WCS) ; architecture client‑serveur ; mise en cache des tuiles pour performance.
- **Solutions open‑source** : QGIS Server (intégration QGIS), GeoServer (robustesse, sécurité, caching), MapServer (rendement brut, faible empreinte).
- **Design cartographique** : hiérarchie visuelle, contraste, symbologie adaptée, légende, échelle nord, crédits ; respect des normes d’accessibilité (WCAG).
- **Workflow professionnel** : préparation des données (QGIS) → publication du service (GeoServer) → création du client web (Leaflet/OpenLayers) → habillage et mise en ligne.
- **Sécurité** : authentification, contrôle d’accès, journalisation, mise à jour régulière des mots de passe et des correctifs.
---
## Glossaire
| Terme | Définition |
|-------|------------|
| **WMS** | Web Map Service : service OGC renvoyant des images cartographiques (PNG, JPEG, SVG) sur demande. |
| **WMTS** | Web Map Tile Service : service fournissant des tuiles raster pré‑générées pour un affichage rapide. |
| **WFS** | Web Feature Service : service permettant le téléchargement et la manipulation de géométries vectorielles (GML, GeoJSON). |
| **WCS** | Web Coverage Service : service délivrant des couvertures raster (ex. : MNT) avec possibilité de sous‑échantillonnage. |
| **GeoServer** | Serveur Java open‑source implémentant les standards OGC, largement utilisé pour publier des services WMS/WFS/WMTS/WCS. |
| **Leaflet** | Bibliothèque JavaScript légère pour créer des cartes interactives compatibles avec les couches WMS/WMTS. |
| **SLD** | Styled Layer Descriptor : fichier XML définissant la symbologie des couches dans un service OGC. |
| **EPSG** | European Petroleum Survey Group : code identifiant un système de référence de coordonnées (ex. : EPSG : 4326 pour WGS 84). |
| **GeoPackage** | Format ouvert basé sur SQLite pour stocker des données géospatiales vectorielles et raster. |
| **WCAG** | Web Content Accessibility Guidelines : ensemble de recommandations pour rendre le contenu web accessible aux personnes en situation de handicap. |
| **Scale denominator** | Valeur numérique de l’échelle d’une carte (ex. : 50 000 pour 1 : 50 000). |
| **CRS** | Coordinate Reference System : système de référence de coordonnées définissant la projection et le datum utilisés. |
| **Tile cache** | mécanisme de stockage des tuiles pré‑générées (ex. : GeoWebCache) afin de réduire le temps de réponse du serveur. |
| **Symbologie** | ensemble de règles (couleur, forme, taille) appliquées aux entités géographiques pour leur représentation visuelle. |
| **Légende** | élément cartographique expliquant la signification des symboles, couleurs et motifs utilisés sur la carte. |
| **Échelle nord** | symbole indiquant la direction du nord géographique sur la carte. |
---
## Exercices d'application corrigés
### Exercice 1 – Publication d’un service WMS et création d’un client Leaflet
**Consigne** :
Vous disposez d’un shapefile `routes_cmr.shp` contenant le réseau routier national (attributs : `type` = autoroute, nationale, régionale, piste). Vous devez :
1. Publier ce shapefile en tant que couche WMS sur un serveur GeoServer installé localement.
2. Créer une page web simple utilisant Leaflet qui affiche le fond OpenStreetMap et la couche WMS des routes, avec un filtre permettant d’afficher uniquement les autoroutes.
**Corrigé** :
**Étape 1 – Préparation des données**
- Dans QGIS, vérifier la projection du shapefile (UTM zone 32N, EPSG : 32632).
- Exporter le shapefile en GeoPackage (`routes_cmr.gpkg`) pour faciliter le chargement dans GeoServer.
**Étape 2 – Configuration de GeoServer**
1. Accéder à l’interface d’administration (`http://localhost:8080/geoserver/web`).
2. Créer un workspace `transport`.
3. Ajouter un magasin de données de type *GeoPackage* pointant vers `routes_cmr.gpkg`.
4. Publier la couche `transport:routes_cmr`.
5. Dans l’onglet *Publishing*, définir les SRS (EPSG:32632) et calculer la bounding box.
6. Créer un fichier SLD `routes.sld` :
```xml
<StyledLayerDescriptor version="1.0.0"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc">
<NamedLayer><Name>routes_cmr</Name>
<UserStyle><Title>Style routes</Title>
<FeatureTypeStyle>
<Rule><Name>Autoroute</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>autoroute</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FF0000</CssParameter>
<CssParameter name="stroke-width">3</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<Rule><Name>Nationale</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>nationale</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#FFA500</CssParameter>
<CssParameter name="stroke-width">2</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<Rule><Name>Régionale</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>régionale</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#008000</CssParameter>
<CssParameter name="stroke-width">1.5</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
<Rule><Name>Piste</Name>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>piste</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
<LineSymbolizer>
<Stroke>
<CssParameter name="stroke">#8B4513</CssParameter>
<CssParameter name="stroke-width">1</CssParameter>
</Stroke>
</LineSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
</NamedLayer>
</StyledLayerDescriptor>
```
7. Dans l’onglet *Style* de la couche, importer `routes.sld` et le définir comme style par défaut.
8. Activer le caching (GeoWebCache) pour les niveaux de zoom 8‑15 afin d’accélérer le rendu.
**Étape 3 – Page web Leaflet**
```html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Réseau routier du Cameroun</title>
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.9.4/dist/leaflet.css"/>
<style>#map{height:100vh;}</style>
</head>
<body>
<div id="map"></div>
<select id="typeFilter" onchange="updateLayer()">
<option value="all">Tous les types</option>
<option value="autoroute">Autoroutes uniquement</option>
<option value="nationale">Nationales uniquement</option>
<option value="regionale">Régionales uniquement</option>
<option value="piste">Pistes uniquement</option>
</select>
<script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"></script>
<script>
const map = L.map('map').setView([6.5, 12.5], 6);
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: '© OpenStreetMap contributors'
}).addTo(map);
const wmsUrl = 'http://localhost:8080/geoserver/transport/wms';
let wmsLayer = L.tileLayer.wms(wmsUrl, {
layers: 'transport:routes_cmr',
format: 'image/png',
transparent: true,
version: '1.1.1'
}).addTo(map);
function updateLayer() {
const type = document.getElementById('typeFilter').value;
let cql = '';
if (type !== 'all') {
cql = `type='${type}'`;
}
wmsLayer.setParams({cql_filter: cql});
}
</script>
</body>
</html>
```
- Le filtre CQL (`cql_filter`) permet de ne renvoyer que les entités correspondant au type sélectionné.
- Tester en ouvrant le fichier HTML dans un navigateur ; vérifier que le changement de sélection met à jour l’affichage sans recharger la page.
**Résultat attendu** : une carte interactive où l’on peut basculer entre l’affichage complet du réseau routier et l’affichage sélectif d’un type de voie, démontrant la maîtrise de la publication WMS et de l’interaction client‑serveur.
---
### Exercice 2 – Habillage d’une carte thématique de densité de population
**Consigne** :
À partir d’un raster de densité de population (population/km²) couvrant la région du Centre (Cameroun), produit à partir du recensement 2022, vous devez :
1. Reclasser le raster en cinq classes (très faible, faible, moyen, élevé, très élevé) selon les seuils : 0‑20, 20‑50, 50‑150, 150‑300, >300 hab/km².
2. Appliquer une palette de couleurs adaptée (du jaune clair au rouge foncé).
3. Créer une mise en page comprenant titre, légende, échelle numérique, échelle graphique, flèche nord et crédits.
4. Exporter la carte en PDF à 300 dpi et préparer les métadonnées pour une publication en tant que couche WMS (GeoServer).
**Corrigé** :
**Étape 1 – Reclassement du raster** (QGIS)
- Ajouter le raster `densite_pop_centre.tif`.
- Ouvrir le *Raster Calculator* et saisir l’expression suivante :
```
("densite_pop_centre@1" < 20) * 1 +
("densite_pop_centre@1" >= 20 AND "densite_pop_centre@1" < 50) * 2 +
("densite_pop_centre@1" >= 50 AND "densite_pop_centre@1" < 150) * 3 +
("densite_pop_centre@1" >= 150 AND "densite_pop_centre@1" < 300) * 4 +
("densite_pop_centre@1" >= 300) * 5
```
- Enregistrer le résultat sous `densite_pop_classes.tif` (type entier, 8 bits).
**Étape 2 – Application de la palette**
- Ouvrir les propriétés du raster reclassé → onglet *Symbologie* → *Singleband pseudocolor*.
- Choisir *New Color Ramp* → *Gradient* → définir les stops :
- Valeur 1 → `#FFFFCC` (jaune très clair)
- Valeur 2 → `#FFEDA0` (jaune orangé)
- Valeur 3 → `#FEB24C` (orange)
- Valeur 4 → `#FD8D3C` (orange rouge)
- Valeur 5 → `#E31A1C` (rouge foncé)
- Appliquer et vérifier l’aperçu.
**Étape 3 – Mise en page**
- Nouveau *Layout* → format A2, orientation portrait.
- Ajouter un *Map item* couvrant presque toute la page, laisser des marges pour les éléments décoratifs.
- Insérer un *Label* : titre = « Densité de population dans la région du Centre – Cameroun (2022) », police Arial Bold, taille 24 pt, centré en haut.
- Ajouter une *Scale Bar* : choisir style *Single Box*, unités métriques, placer en bas‑à‑gauche.
- Ajouter un *Numeric Scale* : texte « Échelle : 1 : 250 000 », placer à côté de la barre d’échelle.
- Insérer un *North Arrow* : style simple, placer en haut‑à‑droite.
- Créer une *Legend* : ne garder que la couche raster, entrer les libellés de classe :
- 1 : Très faible (0‑20 hab/km²)
- 2 : Faible (20‑50)
- 3 : Moyen (50‑150)
- 4 : Élevé (150‑300)
- 5 : Très élevé (>300)
Placer la légende en bas‑à‑droite, fond blanc à 80 % d’opacité.
- Ajouter un *Label* pour les crédits :
`Source : MINSTAT, recensement de la population 2022 ; Traitement : unité de géomatique, Lycée Technique de Yaoundé.`
Police Arial, taille 10 pt, aligné à gauche en bas.
**Étape 4 – Export**
- Dans le menu *Layout* → *Export as PDF* → résolution 300 dpi, cocher *Export as image* si nécessaire, enregistrer `densite_pop_centre.pdf`.
**Étape 5 – Préparation pour la publication WMS**
- Dans GeoServer, créer un workspace `population`.
- Ajouter un magasin de données de type *GeoTIFF* pointant vers `densite_pop_classes.tif`.
- Publier la couche `population:densite_pop_classes`.
- Dans l’onglet *Publishing*, définir le SRS (projeter le raster en WGS 84 / UTM zone 32N si ce n’est pas déjà fait) et calculer la bounding box.
- Créer un SLD correspondant à la palette utilisée (exporter depuis QGIS : *Style → Export → Export SLD…*).
- Télécharger le SLD, l’importer dans GeoServer et l’associer à la couche.
- Activer le *WMTS* caching (GeoWebCache) pour les niveaux de zoom 6‑12 afin de permettre un affichage rapide dans les clients web.
**Vérification** :
- Dans l’interface de prévisualisation de GeoServer, choisir la couche, format OpenLayers, vérifier que les cinq classes apparaissent avec les bonnes couleurs.
- Effectuer un GetMap avec des paramètres bbox couvrant la ville de Yaoundé et confirmer que les valeurs de densité sont correctement représentées :
`http://geoserver.example.com/geoserver/population/wms?service=WMS&version=1.1.1&request=GetMap&layers=population:densite_pop_classes&styles=&bbox=10.5,3.0,13.5,6.5&width=800&height=600&srs=EPSG:32632&format=image/png`
**Résultat attendu** : une carte PDF prête à être imprimée pour un rapport ministériel, ainsi qu’une couche WMS publiable permettant à tout utilisateur d’accéder à la même information thématique via un navigateur ou un SIG desktop.
---
## Erreurs fréquentes et règles de sécurité
| # | Erreur fréquente | Conséquence | Règle de prévention / bonne pratique |
|---|------------------|-------------|--------------------------------------|
| 1 | **Oublier de définir le SRS correctement** lors de la publication d’une couche (ex. : laisser le raster en degrés alors que le service attend des mètres). | Les coordonnées sont décalées, la carte ne s’aligne pas avec les fonds de carte (OSM, Bing). | Toujours vérifier et, si besoin, reprojeter les données dans le SRS cible avant la publication ; utiliser la fonction *Reproject layer* de QGIS ou le *Reproject* de GeoServer. |
| 2 | **Utiliser des couleurs à faible contraste** pour les legenda ou les symboles (ex. : jaune sur fond blanc). | Le texte ou les symboles deviennent illisibles, surtout pour les utilisateurs daltoniens ou en faible luminosité. | Appliquer les règles WCAG 2.1 AA (ratio de contraste ≥ 4,5:1) ; tester avec un simulateur de daltonisme (Coblis, Color Oracle). |
| 3 | **Laisser le compte admin avec le mot de passe par défaut** (`geoserver`/`geoserver`) en production. | Risque d’accès non autorisé, modification ou suppression de services, fuite de données. | Changer immédiatement le mot de passe après la première connexion ; appliquer une politique de changement tous les 90 jours ; restreindre l’accès à l’interface d’administration à une adresse IP précise via le fichier `web.xml` de Tomcat ou un reverse‑proxy. |
| 4 | **Ne pas activer le caching des tuiles** (GeoWebCache ou TileCache) pour un service WMS très sollicité. | Le serveur subit une charge élevée, temps de réponse > 2 s, risque de déni de service en cas de pic de trafic. | Activer le caching dès la publication ; définir des niveaux de zoom adaptés à l’étendue géographique ; surveiller l’utilisation du disque et mettre en place une politique de purge des tuiles anciennes. |
| 5 | **Ne pas valider les entrées utilisateur** dans une application web qui transmet des paramètres CQL ou SQL à GeoServer (ex. : champ de recherche non filtré). | Injection CQL/SQL pouvant conduire à la lecture ou à la suppression de données non autorisées. | Toujours échapper ou paramétrer les entrées ; utiliser les filtres de GeoServer avec des paramètres préparés (`cql_filter` avec valeurs échappées) ; mettre en place un pare‑feu applicatif (ModSecurity) qui rejette les requêtes contenant des mots‑clés dangereux (`DROP`, `DELETE`, `UNION`). |
| 6 | **Oublier de spécifier la transparence** (`transparent=true`) lors de l’appel à un service WMS depuis Leaflet. | Les tuiles recouvrent entièrement le fond de carte, masquant les références géographiques (routes, côtes). | Dans le code Leaflet, toujours ajouter `{transparent: true}` lorsqu’on superpose une couche WMS sur un fond raster ; vérifier dans les outils de développement du navigateur que les requêtes contiennent bien ce paramètre. |
> **Règle de sécurité globale** : toute publication de données géospatiales sur Internet doit être accompagnée d’une analyse d’impact (qui peut voir les données, quel est le niveau de sensibilité, quelles sont les conséquences d’une fuite) et d’une mise en conformité avec la réglementation camerounaise sur la protection des données personnelles (loi n° 2010/012 du 21 décembre 2010 relative à la cybercriminalité et la protection des données personnelles).
---
*Fin du cours.*
Quiz du chapitre
10 questions — vérifie chaque réponse pour voir l'explication.