Actualiser les lots de données suivants dans la base de données PostgreSQL de la plate-forme SIGLoire :
n_commune_ign_r52n_departement_ign_r52n_epci_zsup_r52n_region_ign_r52n_region_exp_000library(datalibaba)
library(yaml)
À 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 :
# Charger le fichier YAML
config <- yaml::read_yaml("../config.yml")
# Récupérer les variables
fichier_gpkg <- config$fichier_gpkg
database <- config$database
schema_name <- config$schema_name
primary_key <- config$primary_key
role <- config$role
emprise <- config$emprise
host_platform <- config$host_platform
port_platform <- config$port_platform
database_platform <- config$database_platform
schema_name_platform <- config$schema_name_platform
role_platform <- config$role_platform
password_platform <- config$password_platform
# Liste des entités concernées
entities <- c("commune", "departement", "epci", "region")
# Liste pour stocker les dataframes
tables_list <- list()
for (entity in entities) {
table_name <- paste0("n_", entity, "_exp_", emprise)
nom_var <- paste0("n_", entity, "_exp_", emprise)
tryCatch({
# Filtrage dynamique avec .data[[...]] et affectation dans l'environnement global
df <- datalibaba::importer_data(
table = table_name,
schema = schema_name,
db = database,
user = role)
# Stockage dans la liste sous le nom final
tables_list[[nom_var]] <- df
# Création en objet dans l’environnement global
assign(nom_var, df, envir = .GlobalEnv)
message(sprintf("DataFrame créé : %s", nom_var))
},
error = function(e) {
message(sprintf("Erreur lors du chargement ou filtrage de la table '%s' : %s",
table_name, e$message))
})
}
n_region_exp_000 <- datalibaba::importer_data(table = "n_region_exp_000",
schema = schema_name,
db = database,
user = role)
Objectif : adapter la structure des données issues de la base DREAL (source : ADMIN EXPRESS v4) à celle des tables de la base PRODIGE
# Consolidation du dataframe des communes à publier en base
n_commune_exp_r52_final <- n_commune_exp_r52 |>
# Ajout de l'identifiant unique gid
dplyr::mutate(gid = seq_len(dplyr::n())) |>
# Sélection et renommage des champs pour correspondre à la structure en base
dplyr::select(gid,
id,
nom_com = nom_officiel,
nom_com_m = nom_officiel_en_majuscules,
statut,
insee_com = code_insee,
population,
date_recensement = date_du_recensement,
organisme_recenseur,
insee_canton = code_insee_du_canton,
insee_arr = code_insee_de_l_arrondissement,
insee_dep = code_insee_du_departement,
insee_reg = code_insee_de_la_region,
code_epci = codes_siren_des_epci,
code_siren,
code_postal,
superficie = superficie_cadastrale,
the_geom)
# Paramétrage explicite de la colonne géométrique de l’objet sf :
sf::st_geometry(n_commune_exp_r52_final) <- "the_geom"
# Consolidation du dataframe des départements à publier en base
n_departement_exp_r52_final <- n_departement_exp_r52 |>
# Ajout de l'identifiant unique gid
dplyr::mutate(gid = seq_len(dplyr::n())) |>
# Sélection et renommage des champs pour correspondre à la structure en base
dplyr::select(
gid,
nom_dep = nom_officiel_en_majuscules,
insee_dep = code_insee,
insee_reg = code_insee_de_la_region,
the_geom)
# Paramétrage explicite de la colonne géométrique de l’objet sf :
sf::st_geometry(n_departement_exp_r52_final) <- "the_geom"
# Consolidation du dataframe des EPCI à publier en base
n_epci_zsup_r52_final <- n_epci_exp_r52 |>
# Ajout de l'identifiant unique gid
dplyr::mutate(gid = seq_len(dplyr::n())) |>
# Sélection et renommage des champs pour correspondre à la structure en base
dplyr::select(
gid,
dep_epci = codes_insee_des_departements_membres, # Valeurs multiples : modification faite en base au préalable
siren_epci = code_siren,
nom_epci = nom_officiel,
the_geom)
# Paramétrage explicite de la colonne géométrique de l’objet sf
sf::st_geometry(n_epci_zsup_r52_final) <- "the_geom"
# Consolidation du dataframe de la région à publier en base
n_region_exp_r52_final <- n_region_exp_r52 |>
# Ajout de l'identifiant unique gid
dplyr::mutate(gid = seq_len(dplyr::n())) |>
# Sélection et renommage des champs pour correspondre à la structure en base
dplyr::select(
gid,
nom_reg = nom_officiel_en_majuscules,
insee_reg = code_insee,
the_geom)
# Paramétrage explicite de la colonne géométrique de l’objet sf
sf::st_geometry(n_region_exp_r52_final) <- "the_geom"
# Consolidation du dataframe de la région à publier en base
n_region_exp_000_final <- n_region_exp_000 |>
# Ajout de l'identifiant unique gid
dplyr::mutate(gid = seq_len(dplyr::n())) |>
# Sélection et renommage des champs pour correspondre à la structure en base
dplyr::select(
gid,
nom_reg = nom_officiel_en_majuscules,
insee_reg = code_insee,
the_geom)
# Paramétrage explicite de la colonne géométrique de l’objet sf
sf::st_geometry(n_region_exp_000_final) <- "the_geom"
Objectif : mettre à jour les données dans la base PRODIGE sans modifier la structure des tables
Il est nécessaire de vérifier ensuite sur la plate-forme que la mise à jour des tables n’entraîne pas de problèmes de visualisation.
datalibaba::poster_data(data = n_commune_exp_r52_final,
table = "n_commune_ign_r52",
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
pk = "gid",
truncate = TRUE)
datalibaba::poster_data(data = n_departement_exp_r52_final,
table = "n_departement_ign_r52",
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
pk = "gid",
truncate = TRUE)
datalibaba::poster_data(data = n_epci_zsup_r52_final,
table = "n_epci_zsup_r52",
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
pk = "gid",
truncate = TRUE)
datalibaba::poster_data(data = n_region_exp_r52_final,
table = "n_region_ign_r52",
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
pk = "gid",
truncate = TRUE)
datalibaba::poster_data(data = n_region_exp_000_final,
table = "n_region_ign_000",
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
pk = "gid",
truncate = TRUE)
# Liste des entités concernées
entities <- c("commune", "departement", "epci", "region")
# Liste pour stocker les dataframes
tables_list <- list()
for (entity in entities) {
table_name <- paste0("n_", entity, "_exp_", emprise) # adapter le nom de la table pour les EPCI
nom_var <- paste0("n_", entity, "_exp_", emprise,"_comment")
tryCatch({
# Filtrage dynamique avec .data[[...]] et affectation dans l'environnement global
df <- datalibaba::get_table_comment(
table = table_name,
schema = schema_name,
db = database,
user = role)
# Stockage dans la liste sous le nom final
tables_list[[nom_var]] <- df
# Création en objet dans l’environnement global
assign(nom_var, df, envir = .GlobalEnv)
message(sprintf("DataFrame créé : %s", nom_var))
},
error = function(e) {
message(sprintf("Erreur lors du chargement des commentaires de la table '%s' : %s",
table_name, e$message))
})
}
# Liste des entités concernées
entities <- c("commune", "departement", "epci", "region")
# Liste pour stocker les dataframes
tables_list <- list()
for (entity in entities) {
table_name <- paste0("n_", entity, "_ign_", emprise)
nom_var <- paste0("n_", entity, "_exp_", emprise,"_comment")
tryCatch({
# Filtrage dynamique avec .data[[...]] et affectation dans l'environnement global
df <- datalibaba::commenter_table(
dico = nom_var$commentaire,
table = table_name,
schema = schema_name_platform,
db = database_platform,
port = port_platform,
server = host_platform,
user = "prodige",
user = role)
# Stockage dans la liste sous le nom final
tables_list[[nom_var]] <- df
# Création en objet dans l’environnement global
assign(nom_var, df, envir = .GlobalEnv)
message(sprintf("DataFrame créé : %s", nom_var))
},
error = function(e) {
message(sprintf("Erreur lors de la publication des commentaires de la table '%s' : %s",
table_name, e$message))
})
}