L’objectif de ce script est d’alimenter le champ
type_espace dans les tables par département et par
millésime d’OCS GE.
Pour ce faire, on utilise :
le champ artificialisation des Données
d’artificialisation issues de l’OCS GE pour les espaces
artificialisés,
une matrice locale pour détailler les espaces non artificialisés en sous-catégories :
Il est nécessaire d’avoir alimenté le champs
artificialisation dans l’étape “Espaces urbanisés et espaces
NAF” au préalable.
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
type_espace# Boucle pour insérer les valeurs dans le champ type_espace
for (annee in names(annee_dept)) {
depts <- annee_dept[[annee]]
for (dept in depts) {
table_name <- paste0(work_schema, ".", prefix_table, annee, "_s_", dept)
# Création de la requête SQL d'UPDATE pour type_espace
update_type_espace <- sprintf(
"UPDATE %s
SET type_espace = CASE
WHEN artificialisation = 'artif' THEN 'espace artificialisé'
WHEN code_cs IN ('CS1.1.1.1', 'CS1.1.1.2', 'CS1.1.2.2') THEN 'espace artificialisé non décompté'
WHEN code_cs = 'CS1.1.2.1' AND code_us = 'US1.3' THEN 'autre surface naturelle'
WHEN code_cs = 'CS1.1.2.1' AND code_us IN ('US1.1', 'US1.2', 'US1.4', 'US1.5', 'US235', 'US2', 'US3', 'US5',
'US4.1.1', 'US4.1.2', 'US4.1.3', 'US4.1.4', 'US4.1.5',
'US4.2', 'US4.3', 'US6.1', 'US6.2', 'US6.3', 'US6.6') THEN 'espace artificialisé non décompté'
WHEN code_cs IN ('CS1.2.1', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3')
AND code_us IN ('US1.1', 'US1.4') THEN 'espace agricole'
WHEN code_cs = 'CS1.2.1' AND code_us = 'US1.2' THEN 'autre surface naturelle'
WHEN code_cs IN ('CS1.2.1', 'CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3')
AND code_us IN ('US1.3', 'US1.5', 'US235', 'US2', 'US3', 'US5',
'US4.1.1', 'US4.1.2', 'US4.1.3', 'US4.1.4', 'US4.1.5',
'US4.2', 'US4.3', 'US6.1', 'US6.2', 'US6.3', 'US6.6') THEN 'autre surface naturelle'
WHEN code_cs = 'CS1.2.2' THEN 'surface en eau'
WHEN code_cs IN ('CS2.1.1', 'CS2.1.1.1', 'CS2.1.1.2', 'CS2.1.1.3', 'CS2.1.2', 'CS2.1.3')
AND code_us = 'US1.2' THEN 'surface naturelle boisée'
WHEN code_cs IN ('CS2.2.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2')
AND code_us IN ('US1.1', 'US1.4') THEN 'espace agricole'
WHEN code_cs IN ('CS2.2.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5')
AND code_us IN ('US1.2', 'US1.3', 'US1.5', 'US6.3', 'US6.6') THEN 'autre surface naturelle'
WHEN code_cs = 'CS2.2.2' AND code_us = 'US1.2' THEN 'surface naturelle boisée'
WHEN code_cs = 'CS2.2.2' AND code_us IN ('US1.3', 'US1.5', 'US6.3', 'US6.6') THEN 'autre surface naturelle'
WHEN code_cs IN ('CS2.2.1', 'CS2.2.1.2', 'CS2.2.1.4', 'CS2.2.1.5', 'CS2.2.2')
AND code_us IN ('US235', 'US2', 'US3', 'US5', 'US4.1.1', 'US4.1.2', 'US4.1.3', 'US4.1.4', 'US4.1.5', 'US4.2', 'US4.3', 'US6.1', 'US6.2') THEN 'espace artificialisé non décompté'
ELSE 'à revoir'
END;",
table_name
)
connexion <- datalibaba::connect_to_db(db = database, user = role)
DBI::dbExecute(connexion, update_type_espace)
DBI::dbDisconnect(connexion)
message(sprintf("Champs type_espace mis à jour dans la table : %s",
table_name))
}
}