Contexte

Objectif

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 :

    • “espace artificialisé non décompté”
    • “espace agricole”
    • “surface en eau”
    • “surface naturelle boisée”
    • “autre surface naturelle”

Il est nécessaire d’avoir alimenté le champs artificialisation dans l’étape “Espaces urbanisés et espaces NAF” au préalable.

Sources

Chargement des librairies

library(datalibaba)
library(DBI)
library(sf)
library(yaml)

Configuration

On récupère les paramètres suivants via le fichier config.yml :

  • millésimes par département des livrables OCS GE
  • base de données de travail
  • schéma de stockage de l’OCS GE
  • schéma de travail
  • préfixe du nom de la table à créer
  • rôle de connexion
# 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

Alimentation du champ 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))
  }
}