Configuration

Chargement des librairies

library(collectr)
library(datalibaba)
library(dplyr)
library(readODS)

Chargement des variables

À faire impérativement : configurer ou vérifier les paramètres du fichier config.yml avant chargement.

Les paramètres suivants sont ensuite récupérés :

  • nom de la base de données
  • nom du schéma de stockage
  • nom du champ sur lequel poser la clé primaire
  • nom du rôle de connection à la base
# Charger le fichier YAML
config <- yaml::read_yaml("../config.yml")

# Récupérer les variables liées à la base de données
database <- config$database
schema_name <- config$schema_name
primary_key <- config$primary_key
role <- config$role

Chargement des lots de données

Table régionale des Servitudes d’Utilité Publique (SUP) PM1

# Lecture de n_ppr_s_r52
n_sup_pm1_s_r52 <- datalibaba::importer_data(table = "n_sup_pm1_s_r52",
                                         schema = "amenagement_urbanisme",
                                         db = database,
                                         user = role)

Fichier consolidé des PPRN

Source : DDT(M) de la région Pays de la Loire

Ce tableau contient des données consolidées manuellement à partir des sites Internet des DDT(M) de la région Pays de la Loire. Il contient notamment :

  • les noms des PPRN
  • leur dates d’approbation
  • les liens vers les documents sur les sites Internet des DDT(M)
# Lecture du fichier ODS
n_pprn_r52_ddtm <- readODS::read_ods("T:/datalab/SRNT/PPRN/DONNEES_CLIENT/n_pprn_r52_ddt.ods")

# Formatage des colonnes
colnames(n_pprn_r52_ddtm) <- collectr::format_colnames(colnames(n_pprn_r52_ddtm))

Sélection des lignes absentes

# Identification des lignes absentes
lignes_absentes <- dplyr::anti_join(
  n_sup_pm1_s_r52,
  n_pprn_r52_ddtm,
  by = "id_gaspar") |>
  dplyr::select(id_gaspar,
                nom_sup_litt,
                code_alea,
                nom_generateur,
                type_generateur,
                mode_generateur,
                source_generateur,
                date_source_generateur,
                gpu_timestamp,
                the_geom)

Consolidation des données

n_document_pprn_s_r52 <- n_sup_pm1_s_r52 |> 
  # Jointure avec les données des DDT(M) pour récupérer le nom du PPRI
  dplyr::left_join(n_pprn_r52_ddtm, by = "id_gaspar") |>
  # Sélection des variables
  dplyr::select(id_gaspar,
                nom_pprn,
                date_approbation,
                site_web,
                code_alea,
                the_geom) |>
  # Ajout du nom de l'aléa
  dplyr::mutate(nom_alea = dplyr::case_when(
    code_alea == 10 ~ "Risque naturel",
    code_alea == 11 ~ "Inondation",
    code_alea == 12 ~ "Mouvement de terrain",
    code_alea == 13 ~ "Séisme",
    code_alea == 30 ~ "Risque minier",
    code_alea == 31 ~ "Affaissement minier",
    code_alea == 32 ~ "Inondation de terrain minier",
    code_alea == 33 ~ "Émission en surface de gaz de mine",
    code_alea == 34 ~ "Echauffement des terrains de dépots",
    code_alea == 99 ~ "Multirisque",
    TRUE ~ NA_character_),
    # Ajout des deux nouvelles variables
    code_etat = "02",
    nom_etat = "Approuvé") |>
  # Déplacement de la variable site_web
  dplyr::relocate(site_web, .after = nom_etat) |>
  # Suppression des doulons de PPR sur deux départements
  dplyr::distinct(id_gaspar, .keep_all = TRUE) |>
  # Suppression des PPRL
  dplyr::filter(!is.na(nom_ppr)) |>
  dplyr::arrange(id_gaspar)

Publication en base

Archivage de la version précédente de la table

collectr::archive_table(host = Sys.getenv("server"),
                        database = database,
                        table = "n_document_pprn_s_r52",
                        schema = schema_name,
                        new_schema = "zz_archives",
                        role = role)

Publication de la nouvelle version de la table

# Publication des données en base
datalibaba::poster_data(data = n_document_pprn_s_r52,
                        table = "n_document_pprn_s_r52",
                        schema = "risque",
                        db = database,
                        pk = primary_key,
                        overwrite = TRUE,
                        user = role)

À exécuter une fois uniquement pour créer la structure du dictionnaire de données à partir de celle du dataframe :

# Création du dictionnaire de données
collectr::create_dictionary(n_document_pprn_s_r52, "document_pprn")

Saisir ensuite dans dictionaries/dico_document_ppr.R les libellés correspondants aux noms des champs si l’information est connue.

Ajout des commentaires

# Date du jour
# Formater la date au format dd/mm/aaaa
date_now <- format(lubridate::now(), "%d/%m/%Y")

# Connection à la base PostgreSQL
connexion <- datalibaba::connect_to_db(db = database, user = role)

# Commentaire de la table
table_comment <- sprintf("COMMENT ON TABLE %s.n_document_pprn_s_r52
  IS 'Documents des Plans de Prévention des Risques Naturels (PPRN) en Pays de la Loire (Source : GéoPortail de l''Urbanisme, DDT(M) de la région Pays de la Loire - mise à jour du %s)';",
  schema_name, date_now)

# Exécution de la requête
DBI::dbExecute(connexion, table_comment)

source("../dictionaries/dico_document_pprn.R")

# Ajouter les commentaires sur les champs
datalibaba::post_dico_attr(dico = dico_document_pprn, 
                           table = "n_document_pprn_s_r52", 
                           schema = schema_name, 
                           db = database,
                           user = role)

# Fermeture de la connection à la base de données
DBI::dbDisconnect(connexion)