10  Raster : Corse

Author

Dr. Elisabetta Pietrostefani

Published

March 21, 2026

Corrigé — à consulter après avoir essayé par vous-mêmes

Ce document contient les réponses complètes à l’exercice Corse posé à la fin de Raster : Indices Topographiques. Essayez d’abord par vous-mêmes avant de consulter ce corrigé.

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

10.1 Exercice 1 — Charger le MNT

Deux options sont disponibles selon les fichiers à disposition.

Option A — MNT complet déjà assemblé (plus simple)

dem_corse <- rast("data/France/Corse/Corse_tout_lambert.tif")

cat("SCR        :", crs(dem_corse, describe = TRUE)$name, "\n")
SCR        : RGF93 v1 / Lambert-93 
cat("Résolution :", res(dem_corse), "\n")
Résolution : 27.27336 27.27336 
cat("Min / Max  :", global(dem_corse, "min", na.rm = TRUE)[[1]], "/",
                    global(dem_corse, "max", na.rm = TRUE)[[1]], "m\n")
Min / Max  : -12 / 2664 m
ggplot() +
  geom_spatraster(data = dem_corse) +
  scale_fill_gradientn(
    colors   = hcl.colors(50, "Terrain"),
    name     = "Altitude (m)",
    na.value = "transparent"
  ) +
  labs(title   = "MNT de la Corse",
       caption = "Source : données Corse | Cours R-Carto") +
  theme_void(base_size = 12) +
  theme(plot.title = element_text(face = "bold", hjust = 0.5))

MNT de la Corse — Lambert-93

Option B — Assembler les 4 tuiles avec mosaic()

t1 <- rast("data/France/Corse/DEM_corse_1.tif")
t2 <- rast("data/France/Corse/DEM_corse_2.tif")
t3 <- rast("data/France/Corse/DEM_corse_3.tif")
t4 <- rast("data/France/Corse/DEM_corse_4.tif")

dem_corse <- mosaic(t1, t2, t3, t4, fun = "mean")
Quand utiliser mosaic() ?

Les MNT à haute résolution couvrant un territoire étendu sont souvent distribués en tuiles pour des raisons de taille de fichier. mosaic() les assemble en un seul raster en appliquant une fonction (ici "mean") aux cellules qui se chevauchent sur les bords.


10.2 Exercice 2 — Calculer la pente

On utilise DEM_corse_1_Lambert93.tif — déjà projeté en mètres. Le SCR en mètres est indispensable : avec des coordonnées en degrés, les valeurs de pente seraient fausses car les unités horizontales et verticales seraient incompatibles.

dem_corse_m <- rast("data/France/Corse/DEM_corse_1_Lambert93.tif")

slope_corse <- terrain(dem_corse_m, v = "slope", unit = "degrees")

cat("Pente moyenne :", round(global(slope_corse, "mean", na.rm = TRUE)[[1]], 1), \n")
Pente moyenne : 7.5 °
cat("Pente max     :", round(global(slope_corse, "max",  na.rm = TRUE)[[1]], 1), \n")
Pente max     : 76.7 °
ggplot() +
  geom_spatraster(data = slope_corse) +
  scale_fill_viridis_c(
    option   = "magma",
    name     = "Pente (°)",
    na.value = "transparent"
  ) +
  labs(title    = "Pente du terrain — Corse",
       subtitle = "Calculée à partir du MNT projeté en Lambert-93",
       caption  = "Source : données Corse | Cours R-Carto") +
  theme_void(base_size = 12) +
  theme(plot.title    = element_text(face = "bold", hjust = 0.5),
        plot.subtitle = element_text(color = "grey40", hjust = 0.5))
Figure 10.1: Pente du terrain — Corse (degrés)

10.3 Exercice 3 — Reclassifier en zones altitudinales

rcl_corse <- matrix(c(
     0,  200, 1,   # Littoral
   200,  800, 2,   # Basse montagne
   800, 1500, 3,   # Montagne
  1500,  Inf, 4    # Haute montagne
), ncol = 3, byrow = TRUE)

corse_zones <- classify(dem_corse, rcl_corse)

# Résumé par zone — group and sum to handle any floating point values
freq_zones <- freq(corse_zones) |>
  filter(value %in% 1:4) |>
  group_by(value) |>
  summarise(count = sum(count), .groups = "drop") |>
  mutate(
    pct  = round(count / sum(count) * 100, 1),
    zone = case_when(
      value == 1 ~ "Littoral (0–200 m)",
      value == 2 ~ "Basse montagne (200–800 m)",
      value == 3 ~ "Montagne (800–1500 m)",
      value == 4 ~ "Haute montagne (> 1500 m)"
    )
  )

knitr::kable(freq_zones[, c("zone", "count", "pct")],
             col.names = c("Zone", "Cellules", "Part (%)"),
             caption   = "Répartition des cellules par zone altitudinale")
Répartition des cellules par zone altitudinale
Zone Cellules Part (%)
Littoral (0–200 m) 4417445 33.7
Basse montagne (200–800 m) 5427988 41.5
Montagne (800–1500 m) 2542799 19.4
Haute montagne (> 1500 m) 704019 5.4
ggplot() +
  geom_spatraster(data = as.factor(corse_zones)) +
  scale_fill_manual(
    values   = c("1" = "#74add1", "2" = "#fee090",
                 "3" = "#fc8d59", "4" = "#d73027"),
    labels   = c("1" = "Littoral (0–200 m)",
                 "2" = "Basse montagne (200–800 m)",
                 "3" = "Montagne (800–1500 m)",
                 "4" = "Haute montagne (> 1500 m)"),
    name     = "Zone altitudinale",
    na.value = "transparent"
  ) +
  labs(title    = "Zones altitudinales — Corse",
       subtitle = "Reclassification du MNT en 4 catégories",
       caption  = "Source : données Corse | Cours R-Carto") +
  theme_void(base_size = 12) +
  theme(plot.title       = element_text(face = "bold", hjust = 0.5),
        plot.subtitle    = element_text(color = "grey40", hjust = 0.5),
        legend.position  = "bottom",
        legend.direction = "vertical")
Figure 10.2: Zones altitudinales de la Corse — reclassification en 4 catégories

10.4 Exercice Bonus — Comparer Liban et Corse

stats <- data.frame(
  territoire = c("Liban", "Corse"),
  alt_moy    = c(
    global(rast("data/Liban/LBN_elevation_w_bathymetry.tif"), "mean", na.rm = TRUE)[[1]],
    global(dem_corse, "mean", na.rm = TRUE)[[1]]
  ),
  alt_max    = c(
    global(rast("data/Liban/LBN_elevation_w_bathymetry.tif"), "max",  na.rm = TRUE)[[1]],
    global(dem_corse, "max",  na.rm = TRUE)[[1]]
  ),
  superficie_km2 = c(10452, 8680)
)

knitr::kable(stats, digits = 0,
             col.names = c("Territoire", "Altitude moy. (m)",
                           "Altitude max. (m)", "Superficie (km²)"),
             caption = "Comparaison topographique Liban / Corse")
Comparaison topographique Liban / Corse
Territoire Altitude moy. (m) Altitude max. (m) Superficie (km²)
Liban -680 3065 10452
Corse 119 2664 8680

← Retour au cours : Raster : Indices Topographiques → Suivant : Analyse Avancée


Dr. Elisabetta Pietrostefani — Directrice Adjointe, Geographic Data Science Lab — Université de Liverpool | Co-Directrice, Imago : Data Service for Imagery | Chercheuse Associée, London School of Economics