Analyses de bassins versants
Jade Dormoy-Boulanger
Février 2026
À la fin de cet atelier, vous serez en mesure de produire un bassin versant avec le logiciel QGIS et d’en extraire l’utilisation des terres avec le logiciel R.
Vous aurez besoin de cette carte d’utilisation des terres (issue de l’inventaire des cultures d’Agriculture et Agroalimentaire Canada) -> https://ouvert.canada.ca/data/fr/dataset/32546f7b-55c2-481e-b300-83fc16054b95
Vous devez également vous créé un compte gratuit et une clé API sur OpenTopography -> https://opentopography.org/blog/introducing-api-keys-access-opentopography-global-datasets
Afin de bien comprendre l’atelier, nous allons commencer par quelques petites notions théoriques:
Notions théoriques
Dans cet atelier, nous allons travailler avec deux types d’objets SIG (systèmes d’information géographique) : les vecteurs et les rasters. Un vecteur est un objet géométrique défini par des points et des lignes, basé sur des coordonnées mathématiques. On l’utilise généralement pour représenter des éléments linéaires ou délimités, comme des routes ou des frontières. Dans notre cas, le bassin versant que nous allons générer sera sous forme vectorielle. Un raster, quant à lui, est essentiellement une image : une grille de pixels, où chaque pixel contient une information. Nous utiliserons notamment une carte d’utilisation des terres provenant de l’inventaire des cultures d’Agriculture et Agroalimentaire Canada, dans laquelle chaque couleur de pixel correspond à un type d’activité particulier. En superposant ces différentes couches SIG, il devient possible de reconstituer un paysage et d’analyser les interactions entre elles — par exemple, entre le contour d’un bassin versant et l’utilisation des terres environnantes.
Également, tout objet SIG est associé à un système de géoréférencement. Concrètement, chaque coordonnée géographique (latitude, longitude) est définie par rapport à un système de référence spatiale (SRS), qui permet de localiser les objets sur une représentation de la Terre, que ce soit une grille plane, comme une carte, ou un ellipsoïde, comme un globe terrestre. Les SRS diffèrent notamment par leur unité de mesure : certains expriment les coordonnées en mètres (comme le système UTM), d’autres en degrés (comme le WGS84, aussi connu sous le code EPSG 4326). Puisque nous n’aurons pas à calculer de distances dans cet atelier, nous utiliserons le système EPSG 4326.
QGIS
1 - Charger un arrière-plan
Nous allons travailler sur un arrière-plan Google Map. Pour se faire, il faut télécharger l’extension QuickMapServices:


Ensuite, afficher le fond Google Map:
Onglet Internet -> QuickMapServices -> Google -> Google Satellite

2 - Établir le SRS
Nous allons changer le SRS pour ESPG 4326


3 - Télécharger les données d’élévation (DEM)
Pour calculer un bassin versant, il est nécessaire d’avoir les données d’élévation de la zone d’intérêt. Ces données sont disponibles via les satellites SRTM:
Télécharger l’extention SRTM-Downloader

Onglet Extensions -> SRTM-Downloader
Cliquer sur Définir l’étendue de la toile pour sélectionner les dimensions des données d’élévation et entrer la clé API obtenue sur OpenTopography en début d’atelier
Cliquer sur Télécharger et ensuite Fermer

4 - Télécharger les outils SAGA
Dans la barre de recherche de l’onglet Extensions, rechercher SAGA. Télécharger Processing Saga NextGen Provider

5 - Calcul du bassin versant
Nous allons utiliser l’algorithme Fill sinks (Wang & Liu) pour identifier et remplir les zones de dépression dans notre modèle d’élévation. Attention de prendre celui de SAGA!

Dans l’onglet DEM, entrer le DEM [EPSG:4326], puis cliquer sur Exécuter

Nous allons calculer les caractéristiques hydrologiques des bassins versants dans la zone d’étude (direction d’écoulement, accumulation d’écoulement, réseaux hydrographiques, etc.) à l’aide de l’outil r.watershed de GRASS

Dans le menu Elevation, sélectionner Filled DEM [ESPG:4326]
Dans le menu Minimum size of exterior watershed basin, inscrire 1000

Cocher seulement Enable Single Flow, Use positive flow et Beautify flat areas
Cliquer sur Exécuter puis sur Fermer

Dans le menu Couches en bas à gauche, tout enlever, sauf Stream segments et Google Satellite
Aller chercher l’outil r.water.outlet de GRASS

Dans le menu Drainage direction raster, sélectionner Drainage direction [ESPG:4326]
Cliquer sur les 3 petits points à droite du menu Coordinates of outlet point et cliquer sur la carte à l’endoit de votre station.
Cliquer sur Exécuter et puis sur Fermer

Votre bassin versant devrait maintenant apparaître sur votre carte

6 - Exporter le bassin versant
Pour exporter le bassin versant, nous devons d’abord le convertir en vecteur.
Onglet Raster -> Conversion -> Polygoniser (raster vers vecteur)

Ensuite, clique droit sur le vecteur nouvellement créé -> Exporter -> Sauvergarder les entités sous…

Sélectionner le format ESRI_Shapefile
Dans le menu Nom de fichier, entrer le nom désiré et cliquer sur les trois petits points, afin de sélectionner l’endroit où le fichier sera exporté

Attention! L’exportation créera 6 fichiers. Ces 6 fichiers composent votre shapefile et doivent toujours rester ensembles!

7 - Extraction de l’utilisation des terres
Maintenant que nous avons un contour de bassin versant en format “shapefile”, nous pouvons l’importer dans R et l’utiliser pour extraire des données d’utilisation du sol. Nous aurons également besoin d’une carte d’utilisation du sol sous forme de raster. Pour les besoin de l’atelier, j’ai utilisé l’Inventaire annuel des cultures 2020 d’Agriculture et Agroalimentaire Canada, disponible ici -> https://ouvert.canada.ca/data/fr/dataset/32546f7b-55c2-481e-b300-83fc16054b95
library(sf)
library(tmap)
library(terra)
library(tidyverse)
#Importation de notre shapefile
essai <- st_read("essai.shp")
Reading layer `essai' from data source
`/Users/charlesmartin/My Drive/UQTR_Pro/Numerilab/Ateliers/BassinsVersantsJade/essai.shp'
using driver `ESRI Shapefile'
Simple feature collection with 2 features and 2 fields
Geometry type: POLYGON
Dimension: XY
Bounding box: xmin: -73.63875 ymin: 46.29458 xmax: -72.89042 ymax: 46.83875
Geodetic CRS: WGS 84
#Vérification que tout a bien fonctionné!
tmap_mode("view")
tm_shape(essai) + tm_polygons()
#importation de notre raster d'utilisation des terres
landuse = rast("aci_2020_qc_v4.tif")
#Vérification que tout à bien fonctionné!
str(landuse)
S4 class 'SpatRaster' [package "terra"]
plot(landuse)

#Changer les catégories numériques par les définitions correspondantes
#selon le guide de l'utilisateur d'Agriculture et Agroalimentaire Canada
landuse_classes <-data.frame(lu_code = c(10,20,30,34,35,50,80,85,110,120,122,130:143,145:158, 160:163, 167,168,174:183, 185,188:200, 210,220,230),
landuse_class = c("Cloud", "Water","Exposed_Land_Barren", "Urban_Developed",
"Greenhouses","Shrubland","Wetland","Peatland","Grassland",
"Agriculture","Pasture_Forages","Too_Wet_to_be_Seeded",
"Fallow","Cereals","Barley","Other_Grains","Millet","Oats","Rye",
"Spelt","Triticale","Wheat","Switchgrass","Sorghun","Quinoa","Winter_Wheat",
"Spring_Wheat","Corn","Tobacco","Ginseng","Oilseeds","Borage","Camelia",
"Canola_Rapeseed","Flaxseed","Mustard","Safflower","Sunflower","Soybeans",
"Pulses","Other_Pulses","Peas","Chickpeas","Beans","Fababeans","Lentils",
"Vegetables","Tomatoes","Potatoes","Sugarbeets","Other Vegetables","Fruits",
"Berries","Blueberry","Cranberry","Other Berry","Orchards","Other Fruits",
"Vineyard","Hops","Sod","Herbs","Nursery","Buckwheat","Canaryseed","Hemp",
"Vetch","Other_Crops","Forest","Coniferous","Broadleaf","Mixedwood"))
levels(landuse)<-landuse_classes
La prochaine étape est de convertir le shapefile du bassin versant dans un format SpatVector et de le reprojetter dans le même système SIG (EPSG 4326) que la carte d’utilisation des terres. Un fois compatible, nous pourrons en extraire des informations.
#Conversion du "shapefile" en format compatible SpatVector
spoly = vect(essai) %>%
terra::project(landuse)
#Extraction des données d'utilisation des terres
landuse.essai = landuse %>%
terra::extract(spoly) %>%
count(ID, landuse_class)
Une dernière chose intéressante à faire peut être la création d’une table de données comprenant l’utilisation en pourcentage, afin de déterminer rapidement l’utilisation du sol prédominente dans le bassin versant.
#Conversion du nombre de pixel associé au différentes utilisations du sol en pourcentage
landuse.essai<-mutate(landuse.essai,percent= (n*100)/sum(n))
#Graphique rapide pour visualisation
graph <- ggplot(landuse.essai) +
geom_col(aes(x = landuse_class, y = percent, fill = landuse_class, width = 10 ))+
theme_classic()+
theme(axis.text.x = element_text(angle=45, hjust = 1))+
xlab("Landuse Categories") +ylab("Percentage (%)")+
ggtitle("Watershed landuses")
graph
