Code
library(sf)
library(terra)
library(dplyr)
library(tidyterra)
library(ggplot2)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 :
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 :
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.
Nous travaillons avec trois sources principales :
Importons les packages nécessaires au traitement :
library(sf)
library(terra)
library(dplyr)
library(tidyterra)
library(ggplot2)Définissons les chemins d’accès à nos fichiers :
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"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 :
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 :
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 :
# 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]]"
# 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]]
# "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 :
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:"
print(identical(crs(mnt), st_crs(wayen)$wkt))[1] TRUE
print(identical(crs(mnt), st_crs(reseau)$wkt))[1] TRUE
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.
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.
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 :
crop)mask)Appliquons l’étape du crop :
# 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 :
mnt_wayen <- mask(mnt_crop, wayen)Visualisation après mask :
Le même principe est appliqué au réseau hydrographique, mais cette fois via une intersection vectorielle avec les limites du bassin.
# Découpage du réseau hydrographique
reseau_wayen <- st_intersection(reseau, wayen)Visualisation du réseau découpé :
crop avant mask pour optimiser les ressources.st_intersection plutôt que st_crop , car il garantit un découpage exact selon le polygone.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.
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()Pour approfondir les concepts et méthodes abordés dans ce tutoriel, les ressources suivantes sont particulièrement utiles :
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
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
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