Mise à jour des limites administratives du Burkina Faso selon la réforme de 2025

Tutoriel pratique avec R et sf pour actualiser les limites administratives du Burkina Faso selon la réforme territoriale de 2025.
Auteur·rice

NEBIE G.C.

Date de publication

2 septembre 2025

Résumé

Cet article présente une méthodologie reproductible pour mettre à jour les limites administratives du Burkina Faso suite à la réforme territoriale de 2025. Grâce à R et au package sf, nous passons de l’ancien découpage (13 régions et 45 provinces) au nouveau (17 régions et 47 provinces) en appliquant une série d’opérations spatiales simples et robustes.

Note importante

Les couches produites dans ce tutoriel sont destinées uniquement à des usages pédagogiques et analytiques.
Elles ne se substituent en aucun cas aux données officielles diffusées par l’Institut Géographique du Burkina Faso (IGB), seule institution habilitée à publier les limites administratives de référence.

Introduction

Le Burkina Faso a récemment entrepris une réforme administrative majeure avec la publication des décrets N°2025-1003/PF/PRIM/MATM/MEF portant changement de dénomination de provinces et de régions circonscriptions administratives et N°2025-1012/PF/PRIM/MATM/MEF portant réorganisation du territoire national en circonscriptions administratives. Ces textes officiels réorganisent complètement le territoire national, faisant passer le pays de 13 à 17 régions et de 45 à 47 provinces.

Méthodologie

Notre workflow se déroule en 4 étapes principales :

  1. Associer départements → provinces → régions à l’aide de jointures spatiales sur les centroïdes.

  2. Appliquer les changements de noms et créer les nouvelles entités administratives selon les décrets.

  3. Agréger les géométries des départements pour obtenir les nouvelles provinces et régions.

  4. Valider les géométries, sauvegarder les résultats et comparer l’ancien et le nouveau découpage.

Mise en œuvre

Chargement des packages et données

Afficher le code
# Chargement des packages pour l'analyse spatiale et la visualisation
library(sf)          # Géotraitement des données spatiales
library(tidyverse)   # Manipulation de données
library(ggplot2)     # Visualisation graphique
library(patchwork)   # Combinaison de graphiques
library(RColorBrewer)

Importons les anciennes couches administratives :

Afficher le code
region <- st_read("data/ADM_Region.shp")
province <- st_read("data/ADM_Province.shp")
departement <- st_read("data/ADM_Commune.shp")

Bonnes pratiques :

  1. Vérifier les systèmes de coordonnées (st_crs()) avant toute jointure.

  2. Harmoniser si nécessaire pour éviter les décalages.

Afficher le code
st_crs(departement) == st_crs(province)
[1] TRUE
Afficher le code
st_crs(region) == st_crs(province)
[1] TRUE

Observons les noms des colonnes de nos fichiers :

Afficher le code
colnames(region)
[1] "Nom"        "SHAPE_Leng" "SHAPE_Area" "geometry"  
Afficher le code
colnames(province)
[1] "Nom"        "SHAPE_Leng" "SHAPE_Area" "geometry"  
Afficher le code
colnames(departement)
[1] "Nom"        "SHAPE_Leng" "SHAPE_Area" "geometry"  

Sélection et renommage des colonnes pour plus de clarté

Afficher le code
region <- region %>% 
  select(Nom) %>% 
  rename(Nom_region = Nom)

province <- province %>% 
  select(Nom) %>% 
  rename(Nom_province = Nom)

departement <- departement %>% 
  select(Nom) %>% 
  rename(Nom_departement = Nom)

Association des départements aux provinces et régions

Nous utilisons les centroïdes des départements pour établir les correspondances.

Afficher le code
# Calcul des centroïdes des départements
centroides_departement <- st_centroid(departement)

# Jointure spatiale pour associer les départements aux provinces
appariement <- st_join(centroides_departement, province, join = st_within)

# Jointure spatiale pour associer les départements aux régions
appariement <- st_join(appariement, region, join = st_within)

Vérifions les cas où la jointure n’a pas fonctionné :

Afficher le code
appariement %>%
  filter(is.na(Nom_province) | is.na(Nom_region))
Simple feature collection with 1 feature and 3 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -3.948516 ymin: 13.37667 xmax: -3.948516 ymax: 13.37667
Geodetic CRS:  WGS 84
  Nom_departement Nom_province Nom_region                   geometry
1         KOMBORI         <NA>       <NA> POINT (-3.948516 13.37667)

La commune de KOMBORI n’est pas correctement associée.

Nous corrigeons manuellement :

Afficher le code
appariement <- appariement %>%
  mutate(Nom_province = case_when(
     Nom_departement == "KOMBORI" ~ "KOSSI",
    .default = Nom_province
  ),
  Nom_region = case_when(
    Nom_departement == "KOMBORI" ~ "BOUCLE DU MOUHOUN",
    .default = Nom_region)
  )

Enfin, ajoutons les colonnes aux départements :

Afficher le code
departement <- departement %>%
  mutate(Nom_province = appariement$Nom_province,
         Nom_region = appariement$Nom_region)

Mise à jour des provinces

Application des changements selon les décrets :

Afficher le code
# Création de la variable Nom_province_nouveau
departement <- departement %>%
  mutate(Nom_province_nouveau = case_when(
    # Création des nouvelles provinces
    Nom_departement %in% c("BOTOU", "KANTCHARI") ~ "DYAMONGOU",
    Nom_departement %in% c("ARBINDA", "KOUTOUGOU") ~ "KARO PELI",
    # Renommage des provinces existantes
    Nom_province == "KOSSI" ~ "KOOSIN",
    Nom_province == "OUBRITENGA" ~ "BASSITENGA",
    Nom_province == "SANMATENGA" ~ "SANDBONDTENGA",
    Nom_province == "SOUM" ~ "DJELGODJI",
    Nom_province == "TAPOA" ~ "GOBNANGOU",
    # Conservation des noms existants pour les autres
    .default = Nom_province
  ))

Vérification :

Afficher le code
# Vérification du nombre de provinces
length(unique(departement$Nom_province_nouveau))
[1] 47

Nous avons bel et bien 47 provinces.

Mise à jour des régions

Même logique pour les régions :

Afficher le code
# Création de la variable Nom_region_nouveau
departement <- departement %>%
  mutate(Nom_region_nouveau = case_when(
    # Création des nouvelles régions
    Nom_province_nouveau %in% c("GNAGNA", "KOMANDJARI") ~ "SIRBA",
    Nom_province_nouveau %in% c("DJELGODJI", "KARO PELI") ~ "SOUM",
    Nom_province_nouveau %in% c("SOUROU", "KOOSIN", "NAYALA") ~ "SOUROU",
    Nom_province_nouveau %in% c("DYAMONGOU", "GOBNANGOU") ~ "TAPOA",
    # Renommage des régions existantes
    Nom_region == "BOUCLE DU MOUHOUN" ~ "BANKUI",
    Nom_region == "CASCADES" ~ "TANNOUNYAN",
    Nom_region == "CENTRE" ~ "KADIOGO",
    Nom_region == "CENTRE-EST" ~ "NAKAMBE",
    Nom_region == "CENTRE-NORD" ~ "KOULSE",
    Nom_region == "CENTRE-OUEST" ~ "NANDO",
    Nom_region == "CENTRE-SUD" ~ "NAZINON",
    Nom_region == "EST" ~ "GOULMOU",
    Nom_region == "HAUTS-BASSINS" ~ "GUIRIKO",
    Nom_region == "NORD" ~ "YAADGA",
    Nom_region == "PLATEAU-CENTRAL" ~ "OUBRI",
    Nom_region == "SAHEL" ~ "LIPTAKO",
    Nom_region == "SUD-OUEST" ~ "DJORO"
  ))

Vérifications :

Afficher le code
# Vérification du nombre de régions
length(unique(departement$Nom_region_nouveau))
[1] 17

Suppression des anciennes colonnes de province et région :

Afficher le code
departement <- departement %>%
  select(-c(Nom_province, Nom_region))

Agrégation et création des nouvelles couches

Nous agrégeons les départements pour former les nouvelles provinces et régions.

Afficher le code
# Provinces
nouvelles_provinces <- departement %>%
  group_by(Nom_province_nouveau) %>%
  summarize(geometry = st_union(geometry))

# Régions
nouvelles_regions <- departement %>%
  group_by(Nom_region_nouveau) %>%
  summarize(geometry = st_union(geometry))

# Validation
nouvelles_provinces <- st_make_valid(nouvelles_provinces)
nouvelles_regions <- st_make_valid(nouvelles_regions)

Validation et sauvegarde

Afficher le code
# Validation des géométries
nouvelles_provinces <- st_make_valid(nouvelles_provinces)
nouvelles_regions <- st_make_valid(nouvelles_regions)
Afficher le code
# Sauvegarde des nouvelles couches
st_write(nouvelles_provinces, "outputs/nouvelles_provinces.shp", delete_dsn = TRUE)
st_write(nouvelles_regions, "outputs/nouvelles_regions.shp", delete_dsn = TRUE)
st_write(departement, "outputs/departements_actualises.shp", delete_dsn = TRUE)

Visualisation

Nous comparons les anciennes et nouvelles cartes des régions.

Carte des nouvelles provinces :

Warning: st_centroid assumes attributes are constant over geometries
Warning in st_point_on_surface.sfc(sf::st_zm(x)): st_point_on_surface may not
give correct results for longitude/latitude data

Cartographie avec R

Les cartes présentées ci-dessus illustrent simplement nos résultats.

Avec R, il est possible d’aller bien plus loin : - création de cartes thématiques (indices socio-économiques, densité de population, ressources naturelles),
- production de cartes interactives avec mapview ou leaflet,
- mise en forme avancée avec tmap ou ggspatial.

Conclusion

Cet article a présenté une méthodologie pour mettre à jour les limites administratives du Burkina Faso suite à la réforme de 2025. Nous avons utilisé des techniques de jointure spatiale, de regroupement et de validation de géométries. Les nouvelles couches sont maintenant prêtes à être utilisées dans des analyses spatiales.

Le code complet et les données sont disponibles sur GitHub : https://github.com/ngastoncyrille/02_limites_administrative

Pour aller plus loin

Prochaines étapes

  • Intégration des données démographiques par nouvelle entité
  • Calcul d’indices de développement territorial

Packages utiles complémentaires

  • tmap pour la cartographie thématique
  • mapview pour la visualisation interactive
  • units pour la gestion des unités de mesure

Références techniques