Prétraitement des données spatiales : Découpage du MNT et du réseau hydrographique pour le sous-bassin de Wayen

Auteur·rice

NEBIE G.C.

Date de publication

23 août 2025

Introduction

En sciences géospatiales appliquées à l’hydrologie, une étape incontournable consiste à restreindre les données aux limites précises de la zone d’étude. Cette opération, dite de prétraitement, permet de :

  • réduire la taille des jeux de données,
  • garantir la cohérence spatiale,
  • et assurer que les analyses hydrologiques reflètent fidèlement la réalité locale.

Dans ce tutoriel, nous utilisons R et ses packages sf et terra pour illustrer un cas concret : le découpage d’un Modèle Numérique de Terrain (MNT) et d’un réseau hydrographique à la limite du sous-bassin de Wayen, situé dans le bassin du Nakanbé au Burkina Faso.

L’objectif est de montrer, pas à pas, comment :

  1. Importer un MNT, un réseau hydrographique et la limite d’un bassin ;
  2. Vérifier et harmoniser leurs systèmes de coordonnées (CRS) ;
  3. Découper ces couches selon la zone d’étude ;
  4. Visualiser les résultats prêts pour l’analyse hydrologique.

Ces prétraitements constituent les fondations pour des analyses plus avancées : calcul de pente, indices topographiques (TWI, SPI), densité de drainage ou modélisation hydrologique.

Importation des données

Nous travaillons avec trois sources principales :

  • MNT 30 m couvrant le Burkina Faso (USGS),
  • Réseau hydrographique HydroSHEDS (HydroSHEDS HydroRIVERS),
  • Limite du sous-bassin de Wayen, que nous avons délimité pou les besoins de ce travail.

Importons les packages nécessaires au traitement :

Code
library(sf)
library(terra)
library(dplyr)
library(tidyterra)
library(ggplot2)

Définissons les chemins d’accès à nos fichiers :

Code
chemin_mnt <- "data/raw/raster/Img_srtm_bg.tif"
chemin_reseau <- "data/raw/shape-file/DGAEN_hydrographie.shp"
chemin_wayen <- "data/raw/shape-file/wayen.shp"

Exploration initiale des données

Avant de réaliser des traitements, il est essentiel d’explorer les caractéristiques de nos données. Selon l’analyse envisagée, cette étape préliminaire permet d’identifier des incohérences éventuelles. Dans notre cas, la priorité est de vérifier le système de coordonnées (CRS) de chaque couche pour garantir leur compatibilité.

Commençons donc par importer nos fichiers dans l’environnement de travail :

Code
mnt <- rast(chemin_mnt)
reseau <- st_read(chemin_reseau, quiet = TRUE)
wayen <- st_read(chemin_wayen, quiet = TRUE)

Visualisons maintenant les données brutes pour situer le bassin de Wayen :

Harmonisation des systèmes de coordonnées (CRS)

Pourquoi est-ce nécessaire ?

Le CRS (Coordinate Reference System) définit la relation entre les coordonnées géographiques et leur projection sur un plan. Des différences de CRS entraînent un mauvais alignement des couches spatiales et biaisent les analyses. De plus, plusieurs fonctions géospatiales en R requièrent explicitement que toutes les données partagent le même CRS.

Nous allons donc commencer par contrôler le CRS des trois jeux de données :

Code
# Système de coordonnées du MNT
crs(mnt)
[1] "PROJCRS[\"WGS 84 / UTM zone 30N\",\n    BASEGEOGCRS[\"WGS 84\",\n        DATUM[\"World Geodetic System 1984\",\n            ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n                LENGTHUNIT[\"metre\",1]]],\n        PRIMEM[\"Greenwich\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433]],\n        ID[\"EPSG\",4326]],\n    CONVERSION[\"Transverse Mercator\",\n        METHOD[\"Transverse Mercator\",\n            ID[\"EPSG\",9807]],\n        PARAMETER[\"Latitude of natural origin\",0,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8801]],\n        PARAMETER[\"Longitude of natural origin\",-3,\n            ANGLEUNIT[\"degree\",0.0174532925199433],\n            ID[\"EPSG\",8802]],\n        PARAMETER[\"Scale factor at natural origin\",0.9996,\n            SCALEUNIT[\"unity\",1],\n            ID[\"EPSG\",8805]],\n        PARAMETER[\"False easting\",500000,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8806]],\n        PARAMETER[\"False northing\",0,\n            LENGTHUNIT[\"metre\",1],\n            ID[\"EPSG\",8807]]],\n    CS[Cartesian,2],\n        AXIS[\"easting\",east,\n            ORDER[1],\n            LENGTHUNIT[\"metre\",1]],\n        AXIS[\"northing\",north,\n            ORDER[2],\n            LENGTHUNIT[\"metre\",1]],\n    ID[\"EPSG\",32630]]"
Code
# Système de coordonnées du réseau hydrographique:
st_crs(reseau)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]
Code
# "Système de coordonnées du bassin de Wayen
st_crs(wayen)
Coordinate Reference System:
  User input: WGS 84 
  wkt:
GEOGCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["latitude",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["longitude",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    ID["EPSG",4326]]

Nous constatons que reseau et wayen ont le même CRS mais différent de celui du mnt. Nous allons harmoniser tout sur le CRS du MNT :

Code
wayen <- st_transform(wayen, crs(mnt))
reseau <- st_transform(reseau, crs(mnt))

# Vérification après transformation
print("CRS après harmonisation:")
[1] "CRS après harmonisation:"
Code
print(identical(crs(mnt), st_crs(wayen)$wkt))
[1] TRUE
Code
print(identical(crs(mnt), st_crs(reseau)$wkt))
[1] TRUE
Astuce pratique : UTM ou WGS84 ?
  • WGS84 (EPSG:4326) : système de coordonnées géographiques. Les positions sont exprimées en latitude et longitude (degrés). Idéal pour le stockage et l’échange de données, mais peu adapté aux calculs précis de distances ou de surfaces.

  • UTM (Universal Transverse Mercator) : système de coordonnées projetées. Les positions sont exprimées en mètres, ce qui rend les calculs de distances, surfaces et analyses spatiales beaucoup plus fiables. Chaque zone UTM couvre une bande de 6° de longitude.

Règle pratique :

  • Utilise WGS84 pour le stockage ou la visualisation globale.

  • Bascule en UTM pour toute analyse nécessitant des calculs métriques (pente, aire, distance, etc.).

Dans notre cas, le MNT est déjà en UTM zone 30N (EPSG:32630), ce qui est parfait pour des analyses hydrologiques locales. C’est pourquoi nous avons choisi d’harmoniser toutes les couches sur ce système de projection.

Prétraitement du MNT : du global au local

Pour toute analyse hydrologique, il est essentiel de restreindre le raster à la zone d’étude. Cette étape permet à la fois :

  • d’améliorer les performances de traitement en réduisant le nombre de pixels,

  • et de concentrer l’analyse uniquement sur la zone pertinente.

Dans R, le package terra propose deux fonctions complémentaires pour ce prétraitement :

crop() : tronque le raster selon la boîte englobante de la zone d’intérêt.

mask() : applique le polygone exact du bassin pour exclure les cellules situées en dehors de ses limites.

Pourquoi utiliser crop puis mask ?

Appliquer directement mask() sur le raster initial peut être coûteux en mémoire et en temps, surtout pour des MNT de grande taille (par exemple, SRTM 30 m couvrant tout le Burkina Faso).

La stratégie recommandée :

  1. Réduction de l’étendue (crop)
  • Le raster est limité à un rectangle proche du polygone, éliminant ainsi les pixels inutiles dès le départ.
  1. Découpage précis (mask)
  • Le polygone exact du bassin est appliqué, conservant uniquement les cellules strictement à l’intérieur.
  • Comme le raster a déjà été réduit, l’opération est plus rapide et économise de la mémoire.

Figure 1: Application réelle de crop() et mask() sur un raster simulé

Appliquons l’étape du crop :

Code
# Découpage du MNT - Étape par étape

# 1. Crop: réduction de l'étendue
mnt_crop <- crop(mnt, wayen)

Visualisation après crop :

Appliquons l’étape du mask :

Code
mnt_wayen <- mask(mnt_crop, wayen)

Visualisation après mask :

Prétraitement du réseau hydrographique

Le même principe est appliqué au réseau hydrographique, mais cette fois via une intersection vectorielle avec les limites du bassin.

  • On utilise st_intersection() pour ne conserver que les segments de rivière à l’intérieur du bassin.
  • Cette approche garantit que toutes les analyses hydrologiques (densité de drainage, connectivité des cours d’eau, etc.) sont basées sur des données locales et cohérentes.
Code
# Découpage du réseau hydrographique
reseau_wayen <- st_intersection(reseau, wayen)

Visualisation du réseau découpé :

Astuce méthodologique
  • Toujours commencer par crop avant mask pour optimiser les ressources.
  • Pour les réseaux vectoriels, privilégier st_intersection plutôt que st_crop , car il garantit un découpage exact selon le polygone.

Résultat final : données prêtes à l’analyse

En combinant le MNT découpé (mnt_wayen) et le réseau hydrographique (reseau_wayen), on obtient une carte intégrée du sous-bassin de Wayen, prête pour le calcul de pente, d’indices topographiques et de modélisations hydrologiques.

Code
ggplot() +
  geom_spatraster(data = mnt_wayen) +
  theme_minimal() +
  scale_fill_whitebox_c(
    palette = "muted") +
  geom_sf(data = reseau_wayen, color = "blue",
          aes(linewidth = ORD_STRA), show.legend = FALSE) +
  scale_linewidth(range = c(0.1, 1)) +
  geom_sf(data = wayen, fill = NA, color = "red",
          linewidth= 1.2) +
  labs(fill = "Altitude (m) ")+
  theme_minimal()

Ressources complémentaires

Pour approfondir les concepts et méthodes abordés dans ce tutoriel, les ressources suivantes sont particulièrement utiles :

Documentation R et packages

  • terra : package R pour le traitement et l’analyse de rasters et vecteurs. Permet de gérer des MNT, calculer des indices topographiques, et manipuler des données spatiales à grande échelle.
    Documentation officielle

  • sf : gestion des données vectorielles en format Simple Features. Facilite l’intersection, la transformation de CRS et la manipulation de polygones ou lignes hydrographiques.
    Documentation officielle

  • tidyterra : extension de terra intégrée au tidyverse, pour un workflow plus intuitif avec ggplot2 et dplyr.
    Tutoriel tidyterra

  • ggspatial : extension de ggplot2 pour la cartographie, avec fonctionnalités d’annotations, flèches nord et échelles.
    Tutoriel ggspatial


Données géospatiales et hydrologiques

  • SRTM 30 m – USGS : modèle numérique de terrain couvrant le Burkina Faso, utile pour calcul de pente, TWI, SPI et autres indices hydrologiques.
    USGS SRTM

  • HydroSHEDS / HydroRIVERS : réseau hydrographique détaillé, avec informations sur les ordres de cours d’eau, très utile pour le découpage vectoriel et la modélisation hydrologique.
    HydroSHEDS

  • FAO – Base de données des sols : cartes et caractéristiques des sols, texture et type, pour analyses hydrologiques et modélisations de mobilité de l’eau.
    FAO Soil Portal


Références méthodologiques

  • Wilson, J. P., & Gallant, J. C. (2000). Terrain Analysis: Principles and Applications. Wiley.
    Analyse topographique, calcul des pentes, courbures, TWI, SPI et autres indicateurs hydrologiques.

  • Hijmans, R. J. (2020). Raster: Geographic Data Analysis and Modeling.
    Guide pratique et tutoriels pour l’exploitation des rasters en R.
    Tutoriel en ligne