L’objectif de ce script est d’alimenter le champ
consommation_enaf dans les tables par département et par
millésime d’OCS GE.
Pour ce faire, on utilise une matrice régionale issue des travaux menés par la DREAL, les DDT(M) et les Agences d’urbanisme de la région Pays de la Loire
library(datalibaba)
library(DBI)
library(sf)
library(yaml)
On récupère les paramètres suivants via le fichier config.yml :
# Charger le fichier YAML
config <- yaml::read_yaml("../config.yml")
# Récupérer la liste annee_dept et le schéma de travail
annee_dept <- config$annee_dept
database <- config$database
ocs_ge_schema <- config$ocs_ge_schema
work_schema <- config$work_schema
prefix_table <- config$prefix_table
role <- config$role
Les champs suivants sont alimentés :
artificialisationconsommation_enafsurfaceartificialisationCe champ est alimenté à partir du champ du même nom issu des Données d’artificialisation issues de l’OCS GE.
Il est ensuite utilisé pour : - consolider un cas particulier dans
l’alimentation du champ consommation_enaf, - alimenter le
champ type_espace.
# Boucle pour insérer les valeurs dans le champ artificialisation
for (annee in names(annee_dept)) {
depts <- annee_dept[[annee]]
for (dept in depts) {
table_name <- paste0(work_schema, ".", prefix_table, annee, "_s_", dept)
artif_name <- paste0(ocs_ge_schema, ".n_artif_", annee, "_s_d", dept)
# Création de la requête SQL d'UPDATE pour type_espace
update_artificialisation <- sprintf(
"UPDATE %s
SET artificialisation = %s.artificialisation
FROM %s
WHERE %s.id = %s.id;",
table_name, artif_name, artif_name, table_name, artif_name
)
connexion <- datalibaba::connect_to_db(db = database, user = role)
DBI::dbExecute(connexion, update_artificialisation)
DBI::dbDisconnect(connexion)
message(sprintf("Champs artificialisation mis à jour dans la table : %s",
table_name))
}
}
consommation_enafImplémentation de la matrice DREAL/DDTM/Agences d’urbanisme de la région Pays de la Loire
Le champ consommation_enaf est de type booléen
(TRUE/FALSE) où :
TRUE correspond à un espace urbaniséFALSE correspond à un espace NAF (Naturel, Agricole,
Forestier).# Boucle pour créer les tables pour chaque combinaison année/département
for (annee in names(annee_dept)) {
depts <- annee_dept[[annee]]
for (dept in depts) {
# Nom de la table dynamique
table_name <- paste0(work_schema, ".", prefix_table, annee, "_s_", dept)
# Requête de mise à jour de la production
update_surf_query <- sprintf("UPDATE %s
SET surface = ROUND(ST_Area(the_geom)::numeric,2);", table_name)
# Requête de mise à jour du champ consommation_enaf = true
update_consommation_enaf_true <- sprintf("UPDATE %s
SET consommation_enaf = TRUE
WHERE
(code_us = 'US1.5' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2'))
OR (code_us = 'US2' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US235' AND code_cs IN ('CS1.1.1', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2', 'CS1.1.2.1', 'CS2.1.1.1', 'CS2.1.2', 'CS2.2.1'))
OR (code_us = 'US3' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US5' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.1.1' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.1.2' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.1.3' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.1.4' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1'))
OR (code_us = 'US4.1.5' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.2' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.3' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS1.2.2', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US6.1' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US6.2' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2', 'CS1.2.1', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US6.3' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2'))
OR (code_us = 'US6.6' AND code_cs IN ('CS1.1.1', 'CS1.1.2', 'CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.1', 'CS1.1.2.2'));", table_name)
# Requête de mise à jour du champ consommation_enaf = false
update_consommation_enaf_false <- sprintf("UPDATE %s
SET consommation_enaf = FALSE
WHERE (code_us IN ('US1.1', 'US1.2', 'US1.3', 'US1.4'))
OR (code_us = 'US1.5' AND code_cs IN ('CS1.2.1', 'CS1.2.2', 'CS1.2.3', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US2' AND code_cs = 'CS1.2.3')
OR (code_us = 'US3' AND code_cs IN ('CS1.2.3', 'CS1.2.2'))
OR (code_us = 'US5' AND code_cs = 'CS1.2.3')
OR (code_us = 'US235' AND code_cs = 'CS1.2.2' AND artificialisation = 'non artif')
OR (code_us = 'US4.1.1' AND code_cs = 'CS1.2.3')
OR (code_us = 'US4.1.2' AND code_cs = 'CS1.2.3')
OR (code_us = 'US4.1.3' AND code_cs = 'CS1.2.3')
OR (code_us = 'US4.1.4' AND code_cs IN ('CS1.2.2', 'CS1.2.3', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US4.1.5' AND code_cs = 'CS1.2.3')
OR (code_us = 'US4.2' AND code_cs = 'CS1.2.3')
OR (code_us = 'US4.3' AND code_cs = 'CS1.2.3')
OR (code_us = 'US6.1' AND code_cs IN ('CS1.2.2', 'CS1.2.3'))
OR (code_us = 'US6.2' AND code_cs IN ('CS1.2.2', 'CS1.2.3'))
OR (code_us = 'US6.3' AND code_cs IN ('CS1.2.1', 'CS1.2.2', 'CS1.2.3', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
OR (code_us = 'US6.6' AND code_cs IN ('CS1.2.1', 'CS1.2.2', 'CS1.2.3', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'));",
table_name)
# Connexion à la base de données
connexion <- datalibaba::connect_to_db(db = database,
user = role)
# Exécution des requêtes d'UPDATE
DBI::dbExecute(connexion, update_surf_query)
DBI::dbExecute(connexion, update_consommation_enaf_true)
DBI::dbExecute(connexion, update_consommation_enaf_false)
# Déconnexion de la base de données
DBI::dbDisconnect(connexion)
# Message d'information
message(sprintf("Champ consommation_enaf mis à jour dans la table : %s",
table_name))
}
}
# Boucle pour créer les tables pour chaque combinaison année/département
for (annee in names(annee_dept)) {
depts <- annee_dept[[annee]]
# Sélection du nom de la table des parcs et jardins selon l'année
table_parcs_jardins <- switch(
annee,
"2019" = paste0(ocs_ge_schema, ".n_parcs_jardins_2019_2020_s_r52"),
"2020" = paste0(ocs_ge_schema, ".n_parcs_jardins_2019_2020_s_r52"),
"2022" = paste0(ocs_ge_schema, ".n_parcs_jardins_2022_s_r52")
)
for (dept in depts) {
# Nom de la table dynamique à traiter
table_name <- paste0(work_schema, ".", prefix_table, annee, "_s_", dept)
# Requête UPDATE adaptée avec la table des parcs et jardins du bon millésime
update_consommation_enaf_jardins <- sprintf(
"UPDATE %s
SET consommation_enaf = FALSE
FROM %s
WHERE (code_us = 'US3' AND code_cs IN ('CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3', 'CS2.2.1', 'CS2.2.1.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2'))
AND ST_Intersects(%s.the_geom, %s.the_geom);",
table_name, table_parcs_jardins, table_name, table_parcs_jardins)
# Connexion à la base de données
connexion <- datalibaba::connect_to_db(db = database, user = role)
# Exécution de la requête d'UPDATE
DBI::dbExecute(connexion, update_consommation_enaf_jardins)
# Déconnexion
DBI::dbDisconnect(connexion)
# Message d'information
message(sprintf("Champ consommation_enaf mis à jour dans la table : %s",
table_name))
}
}
# Boucle pour créer les tables pour chaque combinaison année/département
for (annee in names(annee_dept)) {
depts <- annee_dept[[annee]]
for (dept in depts) {
# Nom de la table dynamique
table_name <- paste0(work_schema, ".", prefix_table, annee, "_s_", dept)
# Requête UPDATE adaptée avec la table solaire photovoltaïque
update_consommation_enaf_solaire <- sprintf(
"UPDATE %s SET consommation_enaf = FALSE
FROM %s.r_solaire_pv_s_r52
WHERE ST_Intersects(%s.the_geom,r_solaire_pv_s_r52.the_geom);",
ocs_ge_schema, table_name)
# Connexion à la base de données
connexion <- datalibaba::connect_to_db(db = database, user = role)
# Exécution de la requête d'UPDATE
DBI::dbExecute(connexion, update_consommation_enaf_solaire)
# Déconnexion
DBI::dbDisconnect(connexion)
# Message d'information
message(sprintf("Champ consommation_enaf mis à jour dans la table : %s",
table_name))
}