diff --git a/.Rbuildignore b/.Rbuildignore index 7c953a07e3ff42ba3dbdfa1cb7788efb2ecc0ff7..19bf34ae010590a7500e4e55da2a63cfbb096ff1 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -13,3 +13,4 @@ captage_eso_sans_code_bss.csv ^pkgdown$ ^\.gitlab-ci\.yml$ ^data\$ +^config\.yml$ diff --git a/config.yml b/config.yml new file mode 100644 index 0000000000000000000000000000000000000000..2b5f7194f60ae139b582f999f86efb9564c9a829 --- /dev/null +++ b/config.yml @@ -0,0 +1,5 @@ +# Millésime de travail pour la table unique des stations de mesure +year: 2025 + +# Spécifier le chemin vers le dernier livrable de l'ARS au format Excel +file_path_data_ars: "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/CAP_SISE_28_03_2025.xlsx" diff --git a/dev/config_fusen.yaml b/dev/config_fusen.yaml index 979a58c602e33850298b75e933b7590a0893fa81..4bc60cf5281c91903c844c48b4074b0f398dbe35 100644 --- a/dev/config_fusen.yaml +++ b/dev/config_fusen.yaml @@ -39,15 +39,17 @@ flat_update_captage_ep.Rmd: check: true document: true overwrite: ask + clean: ask + codecov: false flat_update_hubeau_qualite_nappe_station.Rmd: path: dev/flat_update_hubeau_qualite_nappe_station.Rmd state: active R: [] tests: [] - vignettes: vignettes/mise-a-jour-des-stations-hub-eau-nappes-d-eau-souterraine.Rmd + vignettes: vignettes/mise-a-jour-des-stations-hubeau-nappes-d-eau-souterraine.Rmd inflate: flat_file: dev/flat_update_hubeau_qualite_nappe_station.Rmd - vignette_name: Mise à jour des stations Hub'eau nappes d'eau souterraine + vignette_name: Mise à jour des stations Hubeau nappes d'eau souterraine open_vignette: true check: true document: true @@ -67,6 +69,8 @@ flat_update_hubeau_qualite_rivieres_station_pc.Rmd: check: true document: true overwrite: ask + clean: ask + codecov: false flat_update_r_station_mesure_p_r52.Rmd: path: dev/flat_update_r_station_mesure_p_r52.Rmd state: active diff --git a/dev/flat_update_captage.Rmd b/dev/flat_update_captage.Rmd index 4da19aa7f8d51130afd74e066f6ab29f04bb8977..229d89c42aa2f55da64c929a560c054a9ebeb31b 100644 --- a/dev/flat_update_captage.Rmd +++ b/dev/flat_update_captage.Rmd @@ -15,15 +15,22 @@ library(sf) library(datalibaba) library(glue) library(usethis) - ``` ```{r development-load} # Load already included functions if relevant pkgload::load_all(export_all = FALSE) +``` + +```{r config, eval=FALSE} +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") +# Accéder à la valeur pour file_path_data_ars +file_path_data_ars <- config$file_path_data_ars ``` + # Objectif Actualiser **la table des captages de la région** (`captages.n_captage_p_r52`) @@ -34,19 +41,19 @@ Actualiser **la table des captages de la région** (`captages.n_captage_p_r52`) ## Captages ARS (SISE-EAUX) ### Chargement des captages du dernier livrable en date + +Il faut au préalable **modifier si besoin le chemin vers le dernier livrable de l'ARS au format Excel qui est stocké dans le fichier config.yml** situé à la racine du package. + L'export transmis par l'ARS est importé ainsi que la date du fichier (qui sera utilisée ultérieurement comme métadonnée) : ```{r load_data, eval=FALSE} # Make the dataset file available to the current Rmd during development pkgload::load_all(path = here::here(), export_all = FALSE) -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/CAP_SISE_13_02_2024.xlsx" - # Stocker la date de dernier enregistrement du fichier -last_modified_date <- format(file.info(file_path)$ctime,"%d/%m/%Y") +last_modified_date <- format(file.info(file_path_data_ars)$ctime,"%d/%m/%Y") # Lire le fichier Excel dans un dataframe -data <- readxl::read_excel(file_path) +data <- readxl::read_excel(file_path_data_ars) # Vérifier le type de données dans la colonne "INS - Début d'usage - Date" str(data) @@ -58,7 +65,6 @@ data <- data |> # Convertir les valeurs numériques en dates data <- data |> dplyr::mutate(`INS - Début d'usage - Date` = as.Date(`INS - Début d'usage - Date`, origin = "1899-12-30")) - ``` ### Renommage des variables @@ -68,109 +74,25 @@ table en base : ```{r consolidate_data, eval=FALSE} captage <- data |> dplyr::rename(departement_captage = "INS - Dépt gest - Code", - code_unite_gestion = "UGE - Code national", - nom_unite_gestion = "UGE - Nom", - code_captage = "INS - Code national", - nom_captage = "INS - Nom", - type_installation = "INS - Type - Code", - nature_eau_captage = "INS - Nature de l'eau - Code", - usage_captage = "INS - Usage direct - Code", - etat_installation = "INS - Etat - Code", - date_etat_installation = "INS - Début d'usage - Date", - code_responsable_suivi = "INS - Resp. suivi - Code", - motif_abandon = "INS - Motif d'abandon - Libellé", - code_commune_captage = "COM - Code INSEE (5 car)", - nom_commune_captage = "COM - Nom", - code_bss = "CAP - BSS - Code", - designation_bss = "CAP - BSS - Désignation", - coordonnee_x = "PSV - Coordonnée X", - coordonnee_y = "PSV - Coordonnée Y", - coordonnee_z = "PSV - Coordonnée Z", - debit_moyen_m3j = "INS - Débit moyen/jour - m3/j") - -``` - -## Captages ARS (SISE-EAUX) gérés par un autre département -:warning: On récupère de façon temporaire ces captages (principalement gérés -par le 35) dans un livrable plus ancien car ils ne sont pas disponibles dans -la livraison la plus récente. il faut donc vérifier le contenu du livrable -avant d'exécuter le chunk suivant, après chaque livraison. - -### Chargement des captages manquants -```{r load_missing_data, eval=FALSE} -# Make the dataset file available to the current Rmd during development -pkgload::load_all(path = here::here(), export_all = FALSE) - -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/@archives/CAP_SISE_11_11_2020.xlsx" - -# Lire le fichier Excel dans un dataframe et filtrer pour ne conserver que les enregistrements du 35 -missing_data <- readxl::read_excel(file_path, skip = 5) |> - dplyr::filter(`Dpt Gest.` == "035") - -``` - -### Renommage et sélection des variables -```{r load_missing_data, eval=FALSE} -# Adapter le format du dataframe pour le fusionner avec les données plus récentes -captage_035 <- missing_data |> - dplyr::rename(departement_captage = "Dpt Gest.", - code_unite_gestion = "UGE - Code", - nom_unite_gestion = "UGE - Nom", - code_captage = "Code CAP", - nom_captage = "Nom Captage", - type_installation = "Type ins", - nature_eau_captage = "NatEau", - usage_captage = "Usage", - etat_installation = "Etat", - date_etat_installation = "DébUsage", - motif_abandon = "Motif abandon", - code_commune_captage = "Com Code", - nom_commune_captage = "Com Nom", - code_bss = "BSS code", - designation_bss = "Dés. BSS", - coordonnee_x = "X - Lbt2e", - coordonnee_y = "Y - Lbt2e", - coordonnee_z = "Z", - debit_moyen_m3j = "moy m3/j") |> - dplyr::mutate(date_etat_installation = as.Date(date_etat_installation), - code_responsable_suivi = NA, - code_commune_captage = as.character(code_commune_captage) - ) |> - dplyr::select( - departement_captage, - code_unite_gestion, - nom_unite_gestion, - code_captage, - nom_captage, - type_installation, - nature_eau_captage, - usage_captage, - etat_installation, - date_etat_installation, - code_responsable_suivi, - motif_abandon, - code_commune_captage, - nom_commune_captage, - code_bss, - designation_bss, - coordonnee_x, - coordonnee_y, - coordonnee_z, - debit_moyen_m3j - ) - - -``` - -## Fusion des deux dataframes - -On rassemble les données des dataframes `captage` `captage_035` pour disposer -du référentiel le plus complet possible : -```{r merge_captages, eval=FALSE} -# Fusionner les deux dataframes -captage_full <- dplyr::bind_rows(captage, captage_035) |> - dplyr::arrange(code_captage) + code_unite_gestion = "UGE - Code national", + nom_unite_gestion = "UGE - Nom", + code_captage = "INS - Code national", + nom_captage = "INS - Nom", + type_installation = "INS - Type - Code", + nature_eau_captage = "INS - Nature de l'eau - Code", + usage_captage = "INS - Usage direct - Code", + etat_installation = "INS - Etat - Code", + date_etat_installation = "INS - Début d'usage - Date", + code_responsable_suivi = "INS - Resp. suivi - Code", + motif_abandon = "INS - Motif d'abandon - Libellé", + code_commune_captage = "COM - Code INSEE (5 car)", + nom_commune_captage = "COM - Nom", + code_bss = "CAP - BSS - Code", + designation_bss = "CAP - BSS - Désignation", + coordonnee_x = "PSV - Coordonnée X", + coordonnee_y = "PSV - Coordonnée Y", + coordonnee_z = "PSV - Coordonnée Z", + debit_moyen_m3j = "INS - Débit moyen/jour - m3/j") ``` @@ -187,7 +109,6 @@ table_de_passage_bss_000 <- datalibaba::importer_data( db = "si_eau", user = "admin" ) - ``` Les anciens codes BSS de l'export transmis par l'ARS sont remplacés par les @@ -195,7 +116,7 @@ nouveaux codes issus de la table de passage fournie par le BRGM lorsque la jointure est possible : ```{r update_code_bss, eval=FALSE} # Mettre à jour la variable `code_bss` du dataframe `captage` -captage_bss <- captage_full |> +captage_bss <- captage |> dplyr::left_join(table_de_passage_bss_000, by = c("code_bss" = "indice")) |> dplyr::mutate(code_bss = ifelse(!is.na(nouvel_identifiant), nouvel_identifiant, code_bss)) |> dplyr::select(departement_captage:debit_moyen_m3j) @@ -205,7 +126,7 @@ captage_bss <- captage_full |> Vérification des résultats de la jointure : ```{r dev-count_empty_bss, eval=FALSE} # Compter le nombre de valeurs vides dans captage_full -nb_code_bss_vide_captage <- captage_full |> +nb_code_bss_vide_captage <- captage |> dplyr::summarise(nb_code_bss_vide = sum(is.na(code_bss))) # Compter le nombre de valeurs vides dans captage_bss @@ -239,11 +160,11 @@ cat("Le fichier captage_eso_sans_code_bss.csv a été enregistré avec succès.\ ```{r check_attributes_n_captage_p_r52, eval=FALSE} # Comparer la structure du dataframe avec celle de la table en base collectr::check_structure_table(dataframe = captage, + host = Sys.getenv("server"), database = "si_eau", table = "n_captage_p_r52", schema = "captages", role = "admin") - ``` ## Création d'un dataframe avec les enregistrements sans coordonnées ou des coordonées erronées @@ -255,7 +176,6 @@ captage_sans_geom <- captage_bss |> dplyr::mutate(coordonnee_x = ifelse(coordonnee_x %in% c(1, 3), NA, coordonnee_x), coordonnee_y = ifelse(coordonnee_y %in% c(1, 3), NA, coordonnee_y)) |> dplyr::filter(is.na(coordonnee_x) | is.na(coordonnee_y)) - ``` ```{r save_captage_sans_geom, eval=FALSE} @@ -266,7 +186,6 @@ utils::write.csv(captage_sans_geom, # Afficher un message de confirmation cat("Le fichier captage_sans_geom.csv a été enregistré avec succès.\n") - ``` ## Encodage de la géométrie @@ -285,7 +204,6 @@ captage_geom <- sf::st_as_sf(captage_with_xy, crs = 2154, remove = FALSE) |> dplyr::rename(the_geom = geometry) - ``` ## Fusion des deux dataframes avec et sans géométrie @@ -293,7 +211,6 @@ captage_geom <- sf::st_as_sf(captage_with_xy, Reconstitution du lot de données complet (avec et sans géométrie valide) : ```{r merge_dataframes, eval=FALSE} n_captage_p_r52 <- dplyr::bind_rows(captage_geom, captage_sans_geom) - ``` # Publication de la table en base @@ -302,31 +219,12 @@ n_captage_p_r52 <- dplyr::bind_rows(captage_geom, captage_sans_geom) La version précédente de l'export est stockée dans un schéma d'archive : ```{r archive_old_table, eval=FALSE} -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "n_captage_p_r52", schema = "captages", new_schema = "zz_archives", role = "admin") - -``` - -## Ajout de la contrainté géomatique concernant le type de géométries - -```{r dev-update_geometry_n_captage_p_r52} -# Connexion à la base de données PostgreSQL -connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") - -# Requête SQL pour ajouter la contrainte à la colonne the_geom -constraint_query <- -"ALTER TABLE captages.n_captage_p_r52 -ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" - -# Exécution de la requête ALTER TABLE -DBI::dbExecute(connexion, constraint_query) - -# Fermeture de la connexion -DBI::dbDisconnect(connexion) - ``` ## Récupération des commentaires de la version précédente de la table @@ -339,7 +237,6 @@ n_captage_p_r52_comments <- datalibaba::get_table_comments(table = "n_captage_p_ dplyr::filter(!is.na(nom_col)) |> dplyr::select(nom_col, commentaire) |> dplyr::arrange(nom_col) - ``` ## Publication de la table actualisée @@ -353,7 +250,24 @@ datalibaba::poster_data(data = n_captage_p_r52, pk = "code_captage", overwrite = TRUE, user = "admin") +``` + +## Ajout de la contrainte géomatique concernant le type de géométries + +```{r dev-update_geometry_n_captage_p_r52} +# Connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + +# Requête SQL pour ajouter la contrainte à la colonne the_geom +constraint_query <- +"ALTER TABLE captages.n_captage_p_r52 +ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" + +# Exécution de la requête ALTER TABLE +DBI::dbExecute(connexion, constraint_query) +# Fermeture de la connexion +DBI::dbDisconnect(connexion) ``` ## Publication de la description de la table actualisée @@ -365,7 +279,6 @@ datalibaba::commenter_table( schema = "captages", db = "si_eau", user = "admin") - ``` ## Publication des commentaires des champs de la table actualisée @@ -376,26 +289,6 @@ datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, schema = "captages", db = "si_eau", user = "admin") - -``` - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des captages ARS", - template_dir = "update_captage", - template_description = "Mise à jour des captages ARS", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_captage.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_captage/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") ``` ```{r development-inflate, eval=FALSE} diff --git a/dev/flat_update_captage_ep.Rmd b/dev/flat_update_captage_ep.Rmd index 6fa4c6ed731816fbea234d377403ed301bd8d1a2..9ac2e9c475a47dffb653847e3e889c07df64d12a 100644 --- a/dev/flat_update_captage_ep.Rmd +++ b/dev/flat_update_captage_ep.Rmd @@ -53,17 +53,19 @@ n_captage_eau_potable_p_r52 <- n_captage_p_r52 |> ## Vérification de la correspondance des variables avec les champs stockés en base ```{r check-attributes, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::check_structure_table(connexion, - df = n_captage_eau_potable_p_r52, - table_name = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable") +collectr::check_structure_table(dataframe = n_captage_eau_potable_p_r52, + host = Sys.getenv("server"), + database = "si_eau", + table = "n_captage_eau_potable_p_r52", + schema = "alimentation_eau_potable", + role = "admin") ``` ## Archivage de la version précédente de la table ```{r archive-old-table, eval=FALSE} -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", new_schema = "zz_archives", @@ -73,10 +75,11 @@ collectr::archive_table(database = "si_eau", ## Récupération des commentaires de la version précédente de la table ```{r get-comments-old-table, eval=FALSE} -n_captage_eau_potable_p_r52_comments <- datalibaba::get_table_comments( - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau") |> +n_captage_eau_potable_p_r52_comments <- + datalibaba::get_table_comments( + table = "n_captage_eau_potable_p_r52", + schema = "alimentation_eau_potable", + db = "si_eau") |> dplyr::filter(!is.na(nom_col)) |> dplyr::select(nom_col, commentaire) |> dplyr::arrange(nom_col) @@ -94,6 +97,24 @@ datalibaba::poster_data(data = n_captage_eau_potable_p_r52, user = "admin") ``` +## Ajout de la contrainte géomatique concernant le type de géométries + +```{r dev-update_geometry_n_captage_eau_potable_p_r52} +# Connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + +# Requête SQL pour ajouter la contrainte à la colonne the_geom +constraint_query <- +"ALTER TABLE alimentation_eau_potable.n_captage_eau_potable_p_r52 +ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" + +# Exécution de la requête ALTER TABLE +DBI::dbExecute(connexion, constraint_query) + +# Fermeture de la connexion +DBI::dbDisconnect(connexion) +``` + ## Publication de la description de la table actualisée ```{r publish-new-table-comment, eval=FALSE} @@ -102,8 +123,7 @@ datalibaba::commenter_table( table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", db = "si_eau", - user= "admin" -) + user= "admin") ``` ## Publication des commentaires des champs de la table actualisée @@ -113,27 +133,7 @@ datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", db = "si_eau", - user = "admin" - ) -``` - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des captages en eau potable", - template_dir = "update_captage_ep", - template_description = "Mise à jour des captages en eau potable", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_captage_ep.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_captage_ep/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") + user = "admin") ``` ```{r development-inflate, eval=FALSE} diff --git a/dev/flat_update_hubeau_qualite_nappe_station.Rmd b/dev/flat_update_hubeau_qualite_nappe_station.Rmd index 46d30a67afbc7ca3229050a6a36ef82c30110d00..6f996eb30ee1222c1c396e1aa6846a45bfef5416 100644 --- a/dev/flat_update_hubeau_qualite_nappe_station.Rmd +++ b/dev/flat_update_hubeau_qualite_nappe_station.Rmd @@ -1,5 +1,5 @@ --- -title: "Mise à jour des stations Hub'eau nappes d'eau souterraine" +title: "Mise \u00e0 jour des stations Hubeau nappes d'eau souterraine" output: html_document editor_options: chunk_output_type: console @@ -10,18 +10,16 @@ library(hubeau) library(sf) library(dplyr) library(usethis) - ``` ```{r development-load} # Load already included functions if relevant pkgload::load_all(export_all = FALSE) - ``` # Objectif -Actualiser les **stations de mesure des qualités des nappes d'eau souterraine (ESO)** à partir de l'[API Hub'eau "Qualité des nappes d'eau souterraine"](https://hubeau.eaufrance.fr/page/api-qualite-nappes) dans une base de données PostgreSQL. +Actualiser les **stations de mesure des qualités des nappes d'eau souterraine (ESO)** \u00e0 partir de l'[API Hub'eau \"Qualit\u00e9 des nappes d'eau souterraine"](https://hubeau.eaufrance.fr/page/api-qualite-nappes) dans une base de données PostgreSQL. # Création du dataframe @@ -31,21 +29,18 @@ Téléchargement des données du bassin Loire-Bretagne : ```{r get_hubeau_qualite_nappes_stations_lb, eval=FALSE} hubeau_qualite_nappes_stations_lb <- hubeau::get_qualite_nappes_stations( circonscription_administrative_bassin="Loire-Bretagne") - ``` Téléchargement des données du bassin Seine-Normandie en Mayenne : ```{r get_hubeau_qualite_nappes_stations_53, eval=FALSE} hubeau_qualite_nappes_stations_53 <- hubeau::get_qualite_nappes_stations( circonscription_administrative_bassin="Seine-Normandie",num_departement="53") - ``` Fusion des deux dataframes : ```{r merge_hubeau_qualite_nappes_stations, eval=FALSE} hubeau_qualite_nappes_stations <- dplyr::bind_rows( hubeau_qualite_nappes_stations_lb, hubeau_qualite_nappes_stations_53) - ``` ## Création d'un champs de géométrie @@ -53,7 +48,6 @@ hubeau_qualite_nappes_stations <- dplyr::bind_rows( ```{r create_the_geom, eval=FALSE} # Création de la géométrie hubeau_sf <- create_hubeau_geom(hubeau_qualite_nappes_stations) - ``` # Publication de la table en base @@ -63,12 +57,12 @@ hubeau_sf <- create_hubeau_geom(hubeau_qualite_nappes_stations) La version précédente de la table est stockée dans un schéma d'archive : ```{r archive_old_table, eval=FALSE} # connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "hubeau_qualite_nappes_stations", schema = "qualite_nappes_eau_souterraine", new_schema = "zz_archives", role = "admin") - ``` ## Publication de la table actualisée @@ -82,7 +76,24 @@ datalibaba::poster_data(data = hubeau_sf, pk = "bss_id", overwrite = TRUE, user = "admin") +``` + +## Ajout de la contrainte géomatique concernant le type de géométries + +```{r dev-update_geometry_hubeau_qualite_nappes_stations, eval=FALSE} +# Connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") +# Requête SQL pour ajouter la contrainte à la colonne the_geom +constraint_query <- +"ALTER TABLE qualite_nappes_eau_souterraine.hubeau_qualite_nappes_stations +ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" + +# Exécution de la requête ALTER TABLE +DBI::dbExecute(connexion, constraint_query) + +# Fermeture de la connexion +DBI::dbDisconnect(connexion) ``` ## Publication de la description de la table actualisée @@ -90,13 +101,12 @@ datalibaba::poster_data(data = hubeau_sf, ```{r publish_new_table_comment, eval=FALSE} date_today <- format(Sys.time(), format = "%d/%m/%Y") datalibaba::commenter_table( - comment = glue::glue("Stations de mesure des qualités des nappes d'eau souterraine (ESO) - Bassin Loire-Bretagne (source : Hub'eau)"), + comment = glue::glue("Stations de mesure des qualit\u00e9s des nappes d\'eau souterraine (ESO) - Bassin Loire-Bretagne (source : Hub\'eau)"), table = "hubeau_qualite_nappes_stations", schema = "qualite_nappes_eau_souterraine", db = "si_eau", user = "admin" ) - ``` ## Ajout des commentaires @@ -104,108 +114,108 @@ datalibaba::commenter_table( ```{r add_comments, eval=FALSE} # Création d'une liste avec les noms des variables et leurs descriptions variables <- c( - "bss_id", "Nouveau code national de la station, cf plus d'info ici http://infoterre.brgm.fr/nouveau-code-bss", + "bss_id", "Nouveau code national de la station, cf plus d\'info ici http://infoterre.brgm.fr/nouveau-code-bss", "code_bss", "Ancien code de la station (code BSS)", "urn_bss", "URN de la station", - "date_debut_mesure", "Date de début des mesures qualité sur cette station", - "date_fin_mesure", "Dernière date de mesure qualité connue pour sur cette station", - "precision_coordonnees", "Précision des coordonnées sur cette station", + "date_debut_mesure", "Date de d\u00e9but des mesures qualit\u00e9 sur cette station", + "date_fin_mesure", "Derni\u00e8re date de mesure qualit\u00e9 connue pour sur cette station", + "precision_coordonnees", "Pr\u00e9cision des coordonn\u00e9es sur cette station", "longitude", "Longitude la station (WGS84)", "latitude", "Latitude la station (WGS84)", "altitude", "Altitude NGF de la station", - "code_insee", "Code insee de la commune où se trouve la station", - "nom_commune", "Nom de la commune où se trouve la station", - "num_departement", "Code du département où se trouve la station", - "nom_departement", "Nom du département où se trouve la station", - "nom_region", "Nom nouvelle région où se trouve la station", - "circonscriptions_administrative_bassin", "Circonscription administrative de bassin concernée", + "code_insee", "Code insee de la commune o\u00f9 se trouve la station", + "nom_commune", "Nom de la commune o\u00f9 se trouve la station", + "num_departement", "Code du d\u00e9partement o\u00f9 se trouve la station", + "nom_departement", "Nom du d\u00e9partement o\u00f9 se trouve la station", + "nom_region", "Nom nouvelle r\u00e9gion o\u00f9 se trouve la station", + "circonscriptions_administrative_bassin", "Circonscription administrative de bassin concern\u00e9e", "bassin_dce", "Bassin DCE", "urn_bassin_dce", "URN du bassin DCE", - "code_nature_pe", "Code de la nature du point d'eau (forage, puits, source)", - "nom_nature_pe", "Nom de la nature du point d'eau (forage, puits, source)", - "uri_nature_pe", "URI de la nature du point d'eau (forage, puits, source)", - "libelle_pe", "Libellé du point d'eau", - "code_caracteristique_aquifere", "Code des caractéristiques de l'aquifère au droit du point d'eau", - "nom_caracteristique_aquifere", "Nom des caractéristiques de l'aquifère au droit du point d'eau", - "uri_caracteristique_aquifere", "URI des caractéristiques de l'aquifère au droit du point d'eau", - "code_etat_pe", "Code de l'état du point d'eau", - "nom_etat_pe", "Nom de l'état du point d'eau", - "uri_etat_pe", "URI de l'état du point d'eau", - "code_mode_gisement", "Code du mode de gisement du point d'eau", - "nom_mode_gisement", "Nom du mode de gisement du point d'eau", - "uri_mode_gisement", "URI du mode de gisement du point d'eau", - "profondeur_investigation", "Profondeur d'investigation (m)", - "commentaire_pe", "Commentaire sur le point d'eau", - "codes_entite_hg_bdlisa1", "Entité hydrogéologique dans le référentiel bdlisa", - "codes_entite_hg_bdlisa2", "Entité hydrogéologique dans le référentiel bdlisa", - "codes_entite_hg_bdlisa3", "Entité hydrogéologique dans le référentiel bdlisa", - "noms_entite_hg_bdlisa1", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "noms_entite_hg_bdlisa2", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "noms_entite_hg_bdlisa3", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "urns_bdlisa1", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "urns_bdlisa2", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "urns_bdlisa3", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "codes_masse_eau_rap1", "Codes Masses d'eau de type Rapportage", - "codes_masse_eau_rap2", "Codes Masses d'eau de type Rapportage", - "noms_masse_eau_rap1", "Noms des masses d'eau de type 'rapportage' liées au point d'eau", - "noms_masse_eau_rap2", "Noms des masses d'eau de type 'rapportage' liées au point d'eau", - "urns_masse_eau_rap1", "URN des masse d'eau RAP actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "urns_masse_eau_rap2", "URN des masse d'eau RAP actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "codes_masse_eau_edl1", "Codes Masses d'eau de type Etat des lieux", - "codes_masse_eau_edl2", "Codes Masses d'eau de type Etat des lieux", - "noms_masse_eau_edl1", "Noms des masses d'eau de type 'état des lieux' liées au point d'eau", - "noms_masse_eau_edl2", "Noms des masses d'eau de type 'état des lieux' liées au point d'eau", - "urns_masse_eau_edl1", "URN des masse d'eau EDL actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "urns_masse_eau_edl2", "URN des masse d'eau EDL actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "codes_reseau1", "Réseaux de mesure concernés", - "codes_reseau2", "Réseaux de mesure concernés", - "codes_reseau3", "Réseaux de mesure concernés", - "codes_reseau4", "Réseaux de mesure concernés", - "codes_reseau5", "Réseaux de mesure concernés", - "codes_reseau6", "Réseaux de mesure concernés", - "codes_reseau7", "Réseaux de mesure concernés", - "codes_reseau8", "Réseaux de mesure concernés", - "codes_reseau9", "Réseaux de mesure concernés", - "codes_reseau10", "Réseaux de mesure concernés", - "codes_reseau11", "Réseaux de mesure concernés", - "codes_reseau12", "Réseaux de mesure concernés", - "codes_reseau13", "Réseaux de mesure concernés", - "codes_reseau14", "Réseaux de mesure concernés", - "codes_reseau15", "Réseaux de mesure concernés", - "noms_reseau1", "Noms des réseaux de mesure concernés", - "noms_reseau2", "Noms des réseaux de mesure concernés", - "noms_reseau3", "Noms des réseaux de mesure concernés", - "noms_reseau4", "Noms des réseaux de mesure concernés", - "noms_reseau5", "Noms des réseaux de mesure concernés", - "noms_reseau6", "Noms des réseaux de mesure concernés", - "noms_reseau7", "Noms des réseaux de mesure concernés", - "noms_reseau8", "Noms des réseaux de mesure concernés", - "noms_reseau9", "Noms des réseaux de mesure concernés", - "noms_reseau10", "Noms des réseaux de mesure concernés", - "noms_reseau11", "Noms des réseaux de mesure concernés", - "noms_reseau12", "Noms des réseaux de mesure concernés", - "noms_reseau13", "Noms des réseaux de mesure concernés", - "noms_reseau14", "Noms des réseaux de mesure concernés", - "noms_reseau15", "Noms des réseaux de mesure concernés", - "uris_reseau1", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau2", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau3", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau4", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau5", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau6", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau7", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau8", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau9", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau10", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau11", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau12", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau13", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau14", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau15", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "geometry_type", "Type de géométrie", - "geometry_crs_type", "Type de valeur du système de référence spatial", - "geometry_crs_properties_name", "Système de référence spatial", - "the_geom", "Géométrie de la station de mesure" + "code_nature_pe", "Code de la nature du point d\'eau (forage, puits, source)", + "nom_nature_pe", "Nom de la nature du point d\'eau (forage, puits, source)", + "uri_nature_pe", "URI de la nature du point d\'eau (forage, puits, source)", + "libelle_pe", "Libell\u00e9 du point d\'eau", + "code_caracteristique_aquifere", "Code des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "nom_caracteristique_aquifere", "Nom des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "uri_caracteristique_aquifere", "URI des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "code_etat_pe", "Code de l\'\u00e9tat du point d\'eau", + "nom_etat_pe", "Nom de l\'\u00e9tat du point d\'eau", + "uri_etat_pe", "URI de l\'\u00e9tat du point d\'eau", + "code_mode_gisement", "Code du mode de gisement du point d\'eau", + "nom_mode_gisement", "Nom du mode de gisement du point d\'eau", + "uri_mode_gisement", "URI du mode de gisement du point d\'eau", + "profondeur_investigation", "Profondeur d\'investigation (m)", + "commentaire_pe", "Commentaire sur le point d\'eau", + "codes_entite_hg_bdlisa1", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "codes_entite_hg_bdlisa2", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "codes_entite_hg_bdlisa3", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa1", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa2", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa3", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "urns_bdlisa1", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "urns_bdlisa2", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "urns_bdlisa3", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "codes_masse_eau_rap1", "Codes Masses d\'eau de type Rapportage", + "codes_masse_eau_rap2", "Codes Masses d\'eau de type Rapportage", + "noms_masse_eau_rap1", "Noms des masses d\'eau de type \'rapportage\' li\u00e9es au point d\'eau", + "noms_masse_eau_rap2", "Noms des masses d\'eau de type \'rapportage\' li\u00e9es au point d\'eau", + "urns_masse_eau_rap1", "URN des masse d\'eau RAP actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "urns_masse_eau_rap2", "URN des masse d\'eau RAP actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "codes_masse_eau_edl1", "Codes Masses d\'eau de type Etat des lieux", + "codes_masse_eau_edl2", "Codes Masses d\'eau de type Etat des lieux", + "noms_masse_eau_edl1", "Noms des masses d\'eau de type \'\u00e9tat des lieux\' li\u00e9es au point d\'eau", + "noms_masse_eau_edl2", "Noms des masses d\'eau de type \'\u00e9tat des lieux\' li\u00e9es au point d\'eau", + "urns_masse_eau_edl1", "URN des masse d\'eau EDL actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "urns_masse_eau_edl2", "URN des masse d\'eau EDL actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "codes_reseau1", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau2", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau3", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau4", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau5", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau6", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau7", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau8", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau9", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau10", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau11", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau12", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau13", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau14", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau15", "R\u00e9seaux de mesure concern\u00e9s", + "noms_reseau1", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau2", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau3", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau4", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau5", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau6", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau7", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau8", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau9", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau10", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau11", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau12", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau13", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau14", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau15", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "uris_reseau1", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau2", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau3", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau4", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau5", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau6", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau7", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau8", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau9", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau10", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau11", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau12", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau13", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau14", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau15", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "geometry_type", "Type de g\u00e9om\u00e9trie", + "geometry_crs_type", "Type de valeur du syst\u00e8me de r\u00e9f\u00e9rence spatial", + "geometry_crs_properties_name", "Syst\u00e8me de r\u00e9f\u00e9rence spatial", + "the_geom", "G\u00e9om\u00e9trie de la station de mesure" ) # Créer le dataframe avec les variables @@ -223,33 +233,12 @@ datalibaba::post_dico_attr( db = "si_eau", user = "admin" ) - -``` - -```{r development_create_template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations Hub'eau nappes d'eau souterraine", - template_dir = "update_hubeau_qualite_nappe_station", - template_description = "Mise à jour des stations Hub'eau nappes d'eau souterraine", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_hubeau_qualite_nappe_station.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") - ``` ```{r development-inflate, eval=FALSE} # Run but keep eval=FALSE to avoid infinite loop # Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_nappe_station.Rmd", vignette_name = "Mise à jour des stations Hub'eau nappes d'eau souterraine") +fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_nappe_station.Rmd", vignette_name = "Mise \u00e0 jour des stations Hubeau nappes d\'eau souterraine") ``` diff --git a/dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd b/dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd index 1cf08bebb94dcba8e9a0d89cc2ed3129884020a3..977412aaf08ddc37b46286e2bf763376b39acb74 100644 --- a/dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd +++ b/dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd @@ -1,5 +1,5 @@ --- -title: "Mise à jour des stations Hub'eau cours d'eau et plan d'eau" +title: "Mise \u00e0 jour des stations Hubeau cours d'eau et plan d'eau" output: html_document editor_options: chunk_output_type: console @@ -19,7 +19,7 @@ pkgload::load_all(export_all = FALSE) # Objectif -Actualiser les **stations de mesures physicochimique sur des cours d'eau et plan d'eau** à partir de l'[API Hub'eau "Qualité des cours d'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans une base de données PostgreSQL. +Actualiser les **stations de mesures physicochimique sur des cours d'eau et plan d'eau** à partir de l'[API Hub'eau "Qualit\u00e9 des cours d\'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans une base de données PostgreSQL. # Création du dataframe @@ -41,17 +41,17 @@ hubeau_sf <- create_hubeau_geom(hubeau_qualite_rivieres_station_pc) Dans la variable `libelle_station` : ```{r replace-encoding-problems, eval=FALSE} # Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<e0>", "À", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<e0>", "\u00c0", hubeau_sf$libelle_station) # Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c0>", "À", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c0>", "\u00c0", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c8>", "È", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c8>", "\u00c8", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c9>", "É", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c9>", "\u00c9", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c2>", "Â", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c2>", "\u00c2", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<d4>", "Ô", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<d4>", "\u00d4", hubeau_sf$libelle_station) ``` # Publication de la table en base @@ -61,7 +61,8 @@ hubeau_sf$libelle_station <- gsub("<d4>", "Ô", hubeau_sf$libelle_station) La version précédente de la table est stockée dans un schéma d'archive : ```{r archive-old-table, eval=FALSE} connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "hubeau_qualite_rivieres_station_pc", schema = "qualite_cours_d_eau", new_schema = "zz_archives", @@ -86,7 +87,7 @@ datalibaba::poster_data(data = hubeau_sf, ```{r publish-new-table-comment, eval=FALSE} date_today <- format(Sys.time(), format = "%d/%m/%Y") datalibaba::commenter_table( - comment = glue::glue("Stations de mesures physicochimique sur des cours d'eau et plan d'eau (eau de surface : ESU) (source : Hub'eau)"), + comment = glue::glue("Stations de mesures physicochimique sur des cours d\'eau et plan d\'eau (eau de surface : ESU) (source : Hub\'eau)"), table = "hubeau_qualite_rivieres_station_pc", schema = "qualite_cours_d_eau", db = "si_eau", @@ -94,58 +95,76 @@ datalibaba::commenter_table( ) ``` +## Ajout de la contrainte géomatique concernant le type de géométries + +```{r dev-update_geometry_hubeau_qualite_rivieres_station_pc, eval=FALSE} +# Connexion à la base de données PostgreSQL +connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") + +# Requête SQL pour ajouter la contrainte à la colonne the_geom +constraint_query <- +"ALTER TABLE qualite_cours_d_eau.hubeau_qualite_rivieres_station_pc +ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" + +# Exécution de la requête ALTER TABLE +DBI::dbExecute(connexion, constraint_query) + +# Fermeture de la connexion +DBI::dbDisconnect(connexion) +``` + ## Ajout des commentaires ```{r add-comments, eval=FALSE} # Création d'une liste avec les noms des variables et leurs descriptions variables <- c( - "code_station", "Code Sandre de la station de mesure. dans le référentiel national Sandre Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/stq.json", - "libelle_station", "Libellé Sandre de la station de mesure", + "code_station", "Code Sandre de la station de mesure. dans le r\u00e9f\u00e9rentiel national Sandre Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/stq.json", + "libelle_station", "Libell\u00e9 Sandre de la station de mesure", "uri_station", "URI station Sandre", - "durete", "Dureté moyenne de l'eau", - "coordonnee_x", "Coordonnée X du point caractéristique de la station de mesure", - "coordonnee_y", "Coordonnée Y du point caractéristique de la station de mesure", - "code_projection", "Code Sandre du système de projection des coordonnées de la station de mesure", - "libelle_projection", "Libellé Sandre du système de projection des coordonnées de la station de mesure", - "longitude", "Longitude la station de mesure dans le système de coordonnées WGS84", - "latitude", "Latitude de la station de mesure dans le système de coordonnées WGS84", + "durete", "Duret\u00e9 moyenne de l\'eau", + "coordonnee_x", "Coordonn\u00e9e X du point caract\u00e9ristique de la station de mesure", + "coordonnee_y", "Coordonn\u00e9e Y du point caract\u00e9ristique de la station de mesure", + "code_projection", "Code Sandre du syst\u00e8me de projection des coordonn\u00e9es de la station de mesure", + "libelle_projection", "Libell\u00e9 Sandre du syst\u00e8me de projection des coordonn\u00e9es de la station de mesure", + "longitude", "Longitude la station de mesure dans le syst\u00e8me de coordonn\u00e9es WGS84", + "latitude", "Latitude de la station de mesure dans le syst\u00e8me de coordonn\u00e9es WGS84", "code_commune", "Code INSEE de la commune de rattachement de la station de mesure", - "libelle_commune", "Libellé de la commune de rattachement de la station de mesure", - "code_departement", "Code INSEE du département de rattachement de la station de mesure", - "libelle_departement", "Libellé du département de rattachement de la station de mesure", - "code_region", "Code INSEE de la région de rattachement de la station de mesure", - "libelle_region", "Libellé INSEE de la région de rattachement de la station de mesure", - "code_cours_eau", "Code Sandre de l'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/cea.json (cours d'eau) et https://api.sandre.eaufrance.fr/referentiels/v1/pla.json (plan d'eau)", - "nom_cours_eau", "Libellé long Sandre de l'entité hydrographique associée à la station de mesure", - "uri_cours_eau", "URI du cours d'eau", - "nom_masse_deau", "Libellé de la masse d'eau de rattachement de la station de mesure", - "code_masse_deau", "Code national de la masse d'eau associé à la station de mesure", - "code_eu_masse_deau", "Code européen de la masse d'eau associé à la station de mesure", - "uri_masse_deau", "URI national de la masse d'eau de la station de mesure", - "code_eu_sous_bassin", "Code européen du sous-bassin DCE administratif", - "nom_sous_bassin", "Libellé du sous bassin DCE administratif", + "libelle_commune", "Libell\u00e9 de la commune de rattachement de la station de mesure", + "code_departement", "Code INSEE du d\u00e9partement de rattachement de la station de mesure", + "libelle_departement", "Libell\u00e9 du d\u00e9partement de rattachement de la station de mesure", + "code_region", "Code INSEE de la r\u00e9gion de rattachement de la station de mesure", + "libelle_region", "Libell\u00e9 INSEE de la r\u00e9gion de rattachement de la station de mesure", + "code_cours_eau", "Code Sandre de l\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/cea.json (cours d\'eau) et https://api.sandre.eaufrance.fr/referentiels/v1/pla.json (plan d\'eau)", + "nom_cours_eau", "Libell\u00e9 long Sandre de l\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure", + "uri_cours_eau", "URI du cours d\'eau", + "nom_masse_deau", "Libell\u00e9 de la masse d\'eau de rattachement de la station de mesure", + "code_masse_deau", "Code national de la masse d\'eau associ\u00e9 \u00e0 la station de mesure", + "code_eu_masse_deau", "Code europ\u00e9en de la masse d\'eau associ\u00e9 \u00e0 la station de mesure", + "uri_masse_deau", "URI national de la masse d\'eau de la station de mesure", + "code_eu_sous_bassin", "Code europ\u00e9en du sous-bassin DCE administratif", + "nom_sous_bassin", "Libell\u00e9 du sous bassin DCE administratif", "uri_sous_bassin", "URI du sous-bassin DCE", "code_bassin", "Code national du bassin DCE", - "code_eu_bassin", "Code européen du bassin DCE", - "nom_bassin", "Libellé du bassin DCE", + "code_eu_bassin", "Code europ\u00e9en du bassin DCE", + "nom_bassin", "Libell\u00e9 du bassin DCE", "uri_bassin", "URI du bassin DCE", - "type_entite_hydro", "Code Sandre de la nature d'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/796.json", + "type_entite_hydro", "Code Sandre de la nature d\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/796.json", "commentaire", "Commentaire sur la station de mesure", - "date_creation", "Date de création de la station de mesure", - "date_arret", "Date d'arrêt d'activité de la station de mesure", - "date_maj_information", "Date de mise à jour des informations sur la station de mesure", - "finalite", "Code Sandre de la finalité de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/645.json", - "localisation_precise", "Localisation précise de la station de mesure", + "date_creation", "Date de cr\u00e9ation de la station de mesure", + "date_arret", "Date d\'arr\u00eat d\'activit\u00e9 de la station de mesure", + "date_maj_information", "Date de mise \u00e0 jour des informations sur la station de mesure", + "finalite", "Code Sandre de la finalit\u00e9 de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/645.json", + "localisation_precise", "Localisation pr\u00e9cise de la station de mesure", "nature", "Code Sandre de la nature de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/62.json", - "altitude_point_caracteristique", "Altitude du point caractéristique de la station de mesure", - "point_kilometrique", "Pk du point caractéristique sur le tronçon de l'entité hydrographique principale associée à la station de mesure", - "premier_mois_annee_etiage", "Premier mois de l'année d'étiage de la station de mesure", - "superficie_bassin_versant_reel", "Superficie réelle du bassin versant réel", + "altitude_point_caracteristique", "Altitude du point caract\u00e9ristique de la station de mesure", + "point_kilometrique", "Pk du point caract\u00e9ristique sur le tron\u00e7on de l\'entit\u00e9 hydrographique principale associ\u00e9e \u00e0 la station de mesure", + "premier_mois_annee_etiage", "Premier mois de l\'ann\u00e9e d\'\u00e9tiage de la station de mesure", + "superficie_bassin_versant_reel", "Superficie r\u00e9elle du bassin versant r\u00e9el", "superficie_bassin_versant_topo", "Superficie topographique du bassin versant topographique", - "geometry_type", "Type de géométrie", - "geometry_crs_type", "Type de valeur du système de référence spatial", - "geometry_crs_properties_name", "Système de référence spatial", - "the_geom", "Géométrie de la station de mesure" + "geometry_type", "Type de g\u00e9om\u00e9trie", + "geometry_crs_type", "Type de valeur du syst\u00e8me de r\u00e9f\u00e9rence spatial", + "geometry_crs_properties_name", "Syst\u00e8me de r\u00e9f\u00e9rence spatial", + "the_geom", "G\u00e9om\u00e9trie de la station de mesure" ) # Créer le dataframe avec les variables @@ -165,28 +184,9 @@ datalibaba::post_dico_attr( ) ``` -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau", - template_dir = "update_hubeau_qualite_rivieres_station", - template_description = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - ```{r development-inflate, eval=FALSE} # Run but keep eval=FALSE to avoid infinite loop # Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd", vignette_name = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau") +fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd", vignette_name = "Mise \u00e0 jour des stations Hub\'eau cours d\'eau et plan d\'eau") ``` diff --git a/dev/flat_update_r_station_mesure_p_r52.Rmd b/dev/flat_update_r_station_mesure_p_r52.Rmd index 158875ef8f010615d31b5fa9d8cf74571ec107bf..0c697ff767c787a8c9693735bb831ca0a788b800 100644 --- a/dev/flat_update_r_station_mesure_p_r52.Rmd +++ b/dev/flat_update_r_station_mesure_p_r52.Rmd @@ -1,5 +1,5 @@ --- -title: "Mise à jour des stations de mesure" +title: "Mise \u00e0 jour des stations de mesure" output: html_document editor_options: chunk_output_type: console @@ -20,6 +20,14 @@ library(usethis) pkgload::load_all(export_all = FALSE) ``` +```{r config, eval=FALSE} +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") + +# Accéder à la valeur pour year +year <- config$year +``` + # Objectif Actualiser les **stations de mesure eau souterraine (ESO) et eau de surface (ESU)** @@ -68,53 +76,38 @@ data_esu_sandre <- datalibaba::importer_data( ## Stations de mesure des qualités des nappes d'eau souterraine (ESO) -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : +Renommage et ajout de variables : ```{r consolidate_stations_hubeau_eso, eval=FALSE} stations_eso_hubeau <- data_eso_hubeau |> dplyr::rename(libelle_station = nom_commune, date_creation = date_debut_mesure, code_commune = code_insee) |> dplyr::mutate(code_sise_eaux = NA, + code_naiades = NA, source = "HUBEAU", nature_eau = "ESO", - code_masse_eau = NA) |> - dplyr::select(code_bss = bss_id, - code_sise_eaux, - libelle_station, - nature_eau, - date_creation, - source, - code_masse_eau = codes_masse_eau_edl, - code_commune, - the_geom) + code_masse_eau = NA) # Convertir les dates de la variable date_creation stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) ``` -Remplacer les valeurs vides dans `code_sise_eaux` par NA dans `stations_eso_hubeau` : -```{r na_code_sise_eaux, eval=FALSE} -stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) -``` - -Réaliser la jointure sur la variable `code_bss` : +Réaliser la jointure sur la variable `bss_id` : ```{r update_code_sise_eaux, eval=FALSE} # Supprimer l'objet géométrie du dataframe data_ars data_ars_no_geom <- data_ars |> sf::st_drop_geometry() # Réaliser une jointure attributaire stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::left_join(data_ars_no_geom, by = c("code_bss" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage + dplyr::left_join(data_ars_no_geom, by = c("bss_id" = "code_bss")) |> + dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) ``` Identification des doublons générés par la jointure de récupération des `code_sise_eaux` : ```{r get_duplicates_code_sise_eaux, eval=FALSE} # Compter les occurrences de chaque code_station doublons_stations_code_sise_eaux <- stations_eso_hubeau |> - dplyr::group_by(code_bss) |> + dplyr::group_by(bss_id) |> dplyr::tally(name = "n") |> dplyr::filter(n > 1) @@ -125,8 +118,8 @@ doublons_stations_code_sise_eaux <- stations_eso_hubeau |> # Joindre les informations additionnelles doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(stations_eso_hubeau_no_geom, by = "code_bss") |> - dplyr::select(code_bss, n, code_sise_eaux, libelle_station) + dplyr::left_join(stations_eso_hubeau_no_geom, by = "bss_id") |> + dplyr::select(bss_id, n, code_sise_eaux, libelle_station) # Visualiser les doublons print(doublons_stations_code_sise_eaux) @@ -135,19 +128,36 @@ print(doublons_stations_code_sise_eaux) Suppression des doublons : ```{r delete_duplicates_code_sise_eaux, eval=FALSE} stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::group_by(code_bss, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() + dplyr::group_by(bss_id, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() +``` + +Sélection finale des variables : +```{r consolidate_stations_esu_sandre, eval=FALSE} +stations_eso_hubeau <- stations_eso_hubeau |> + dplyr::select(code_bss = bss_id, + code_sise_eaux, + code_naiades, + libelle_station, + date_creation, + nature_eau, + source, + code_masse_eau = codes_masse_eau_edl, + code_commune, + the_geom) ``` ## Stations de mesure de la qualité des eaux superficielles continentales (STQ) -Sélection des variables et ajout de la source : +Sélection et ajout de variables : ```{r consolidate_stations_esu_sandre, eval=FALSE} stations_esu_sandre <- data_esu_sandre |> dplyr::mutate(code_bss = NA, + code_sise_eaux = NA, source = "SANDRE", nature_eau = "ESU") |> dplyr::select(code_bss, - code_sise_eaux = code_station, + code_sise_eaux, + code_naiades = code_station, libelle_station, date_creation, nature_eau, @@ -176,7 +186,7 @@ stations_ars_not_hubeau_sandre <- data_ars_with_geom |> sf::st_drop_geometry() |> # Exclure les stations présentes dans stations_eso_hubeau et stations_esu_sandre dplyr::anti_join(stations_eso_hubeau, by = c("code_bss" = "code_bss")) |> - dplyr::anti_join(stations_esu_sandre, by = c("code_captage" = "code_sise_eaux")) |> + dplyr::anti_join(stations_esu_sandre, by = c("code_captage" = "code_naiades")) |> # Récupérer les géométries par jointure avec data_ars dplyr::left_join(data_ars, by = "code_captage") |> # Désélectionner toutes les variables finissant par .y @@ -188,19 +198,34 @@ names(stations_ars_not_hubeau_sandre) <- gsub("\\.x$", "", names(stations_ars_no ## Consolidation des stations ARS -Ajout de la source et sélection des variables : +Ajout de la source : ```{r consolidate_stations_ars, eval=FALSE} -# Ajouter la variable `source` et sélectionner les variables nécessaires +# Ajouter la variable `source` stations_ars <- stations_ars_not_hubeau_sandre |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_bss = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - nature_eau = nature_eau_captage, - date_creation = date_etat_installation, - source, - code_commune = code_commune_captage, - the_geom) + dplyr::mutate(source = "ARS") +``` + +## Ajout de la variable `code_naiades` pour les stations ARS + +Cet ajout ne concerne que les stations ESU : +```{r add_code_naiades, eval=FALSE} +# Créer et alimenter la variable `code_naiades` à partir de `code_sise_eaux` +stations_ars <- stations_ars |> + dplyr::mutate( + code_naiades = dplyr::case_when( + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^044") ~ stringr::str_replace(code_captage, "^044", "BS"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^049") ~ stringr::str_replace(code_captage, "^049", "BX"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^053") ~ stringr::str_replace(code_captage, "^053", "CB"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^072") ~ stringr::str_replace(code_captage, "^072", "CU"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^085") ~ stringr::str_replace(code_captage, "^085", "DH"), + TRUE ~ NA_character_ # Met NA si aucun pattern ne correspond + ) + ) ``` ## Ajout du `code_masse_eau` pour les stations ARS @@ -227,6 +252,22 @@ stations_ars <- stations_ars |> join = sf::st_within, left = TRUE) ``` +Sélection finale des variables : +```{r select_variables_stations_ars, eval=FALSE} +# Sélectionner les variables nécessaires +stations_ars <- stations_ars |> + dplyr::select(code_bss, + code_sise_eaux = code_captage, + code_naiades, + libelle_station = nom_captage, + nature_eau = nature_eau_captage, + date_creation = date_etat_installation, + source, + code_masse_eau, + code_commune = code_commune_captage, + the_geom) +``` + ## Fusion des trois dataframes ```{r merge_stations, eval=FALSE} @@ -287,9 +328,9 @@ n_sage_r52_valid <- sf::st_make_valid(n_sage_r52_union) n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) ``` -Sélection des stations ESU présentes dans les SAGE et la région : +Sélection des stations présentes dans les SAGE et la région : ```{r st_intersects_stations_sage, eval=FALSE} -# Filtrer les stations ESU présentes dans les SAGE de la région +# Filtrer les stations présentes dans les SAGE de la région station_sage_r52 <- sf::st_filter(station_full, n_sage_r52_limit) ``` @@ -306,25 +347,6 @@ station_sage_r52 <- station_sage_r52 |> dplyr::mutate(id_station = dplyr::row_number()) ``` - -## Ajout de la variable `code_naiades` -Cet ajout ne concerne que les stations ESU : -```{r add_code_naiades, eval=FALSE} -# Créer et alimenter la variable `code_naiades` à partir de `code_sise_eaux` -station_sage_r52 <- station_sage_r52 |> - dplyr::mutate( - code_naiades = dplyr::case_when( - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^044") ~ stringr::str_replace(code_sise_eaux, "^044", "BS"), - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^049") ~ stringr::str_replace(code_sise_eaux, "^049", "BX"), - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^053") ~ stringr::str_replace(code_sise_eaux, "^053", "CB"), - TRUE ~ NA_character_ # Met NA si aucun pattern ne correspond - ) - ) -``` - ## Ajout de la variable `code_bassin_versant` Jointure spatiale entre `n_bassin_versant_specifique_000` et `station_sage_r52` : @@ -332,8 +354,14 @@ Jointure spatiale entre `n_bassin_versant_specifique_000` et `station_sage_r52` # Réaliser une jointure spatiale pour récupérer la variable `code_bassin_versant` station_sage_r52 <- station_sage_r52 |> sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique), - join = sf::st_within, left = TRUE) + dplyr::select(code_bassin_versant = code_bassin_versant_specifique, + code_eu_masse_eau), + join = sf::st_within, left = TRUE) |> + dplyr::mutate(code_bassin_versant = dplyr::if_else( + stringr::str_starts(code_bassin_versant, "H0000000"), + code_eu_masse_eau, + code_bassin_versant + )) ``` Identification des doublons générés par la superposition de périmètres dans la table des bassins versants : @@ -466,16 +494,13 @@ r_station_mesure_p_r52 <- station_sage_r52 |> ## Création dynamique du nom de la table avec l'année en cours ```{r create_table_name, eval=FALSE} -# Définir l'année en cours -current_year <- format(Sys.Date(), "%Y") - # Construire dynamiquement le nom de la table -table_name <- paste0("r_station_mesure_p_", current_year, "_r52") +table_name <- paste0("r_station_mesure_p_", year, "_r52") ``` ## Archivage de la version précédente de la table -La version précédente de l'export est stockée dans un schéma d'archive : +La version précédente de l'export est stock\u00e9e dans un sch\u00e9ma d'archive : ```{r archive_old_table, eval=FALSE} collectr::archive_table(host = Sys.getenv("server"), database = "si_eau", @@ -499,7 +524,7 @@ datalibaba::poster_data(data = r_station_mesure_p_r52, user = "admin") ``` -## Mise à jour de la géométrie de la table `r_station_mesure_p_current_year_r52` +## Mise à jour de la géométrie de la table `r_station_mesure_p_year_r52` ```{r update_geometry_r_station_mesure_p_current_year_r52, eval=FALSE} # Connexion à la base de données PostgreSQL @@ -530,9 +555,9 @@ DBI::dbDisconnect(connexion) ```{r publish_new_table_comment, eval=FALSE} date_today <- format(Sys.time(), format = "%d/%m/%Y") datalibaba::commenter_table( - comment = glue::glue("Stations de mesure millésime ", - current_year, - " (source : ARS + Hub'eau + SANDRE, ", + comment = glue::glue("Stations de mesure mill\u00e9sime ", + year, + " (source : ARS + Hub\'eau + SANDRE, ", date_today, ")"), table = table_name, schema = "stations", @@ -546,20 +571,20 @@ datalibaba::commenter_table( ```{r publish_new_fields_comments, eval=FALSE} # Création d'une liste avec les noms des variables et leurs descriptions variables <- c( - "id_station", "Identifiant unique de la station de mesur", + "id_station", "Identifiant unique de la station de mesure", "code_bss", "Code BSS de la station de mesure", "code_sise_eaux", "Code SISE-EAUX de la station de mesure", - "code_naiades", "Code Naïades de la station de mesure", + "code_naiades", "Code Na\u00efades de la station de mesure", "libelle_station", "Nom de la station de mesure", - "nature_eau", "Nature de l'eau de la station de mesure", - "date_creation", "Date de création de la station de mesure", - "source", "Source de la donnée", - "code_masse_eau", "Code de la masse d'eau de la station de mesure", + "nature_eau", "Nature de l\'eau de la station de mesure", + "date_creation", "Date de cr\u00e9ation de la station de mesure", + "source", "Source de la donn\u00e9e", + "code_masse_eau", "Code de la masse d\'eau de la station de mesure", "code_bassin_versant", "Code du bassin versant de la station de mesure", "code_commune", "Code INSEE de la commune de la station de mesure", "code_sage", "Code du SAGE de la station de mesure", "captage_prioritaire", "Captaire prioritaire (T/F)", - "the_geom", "Géométrie ponctuelle de la station de mesure" + "the_geom", "G\u00e9om\u00e9trie ponctuelle de la station de mesure" ) # Création du dataframe avec les variables @@ -577,30 +602,10 @@ datalibaba::post_dico_attr(dico = comments, user = "admin") ``` -## Mise à jour du skeleton - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations de mesure ESO et ESU", - template_dir = "update_r_station_mesure_p_r52", - template_description = "Mise à jour des stations de mesure ESO et ES", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_r_station_mesure_p_r52.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_r_station_mesure_p_r52/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - ```{r development-inflate, eval=FALSE} # Run but keep eval=FALSE to avoid infinite loop # Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_r_station_mesure_p_r52.Rmd", vignette_name = "Mise à jour des stations de mesure") +fusen::inflate(flat_file = "dev/flat_update_r_station_mesure_p_r52.Rmd", + vignette_name = "Mise \u00e0 jour des stations de mesure") ``` diff --git a/dev/flat_update_station_eso.Rmd b/dev/flat_update_station_eso.Rmd deleted file mode 100644 index 3d03e59588b7cee2df35ec11e137b6cd625dee9f..0000000000000000000000000000000000000000 --- a/dev/flat_update_station_eso.Rmd +++ /dev/null @@ -1,366 +0,0 @@ ---- -title: "Mise à jour des stations ESO" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(collectr) -library(datalibaba) -library(dplyr) -library(sf) -library(usethis) - -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser les **stations de mesure eau de souterraine (ESO)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `qualite_nappes_eau_souterraine.hubeau_qualite_nappes_stations` (source : Hub'eau) -- `captages.n_captage_p_r52` (source : ARS) - -# Chargement des lot de données source - -## Stations de mesure des qualités des nappes d'eau souterraine (ESO) -```{r load_hubeau_qualite_nappes_stations, eval=FALSE} -data_hubeau_eso <- datalibaba::importer_data( - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau") -``` - -## Captages ARS ESO -Chargement de la table des captages en filtrant sur la nature de l'eau du captage et le début du `code_bss` : -```{r load_captages_ars_eso, eval=FALSE} -data_ars_eso <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESO' & startsWith(code_bss, "BSS")) -``` - -Suppression des géométries vides : -```{r delete-empty-geom, eval=FALSE} -data_ars_with_geom = data_ars_eso[!sf::st_is_empty(data_ars_eso),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de Hub'eau - -```{r select_captages_ars_not_hubeau, eval=FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_hubeau <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_hubeau_eso, by = c("code_bss" = "bss_id")) - -# Récupérer les géométries par jointure avec stations_eso_ars -data_ars_not_hubeau <- data_ars_not_hubeau |> - dplyr::left_join(data_ars_eso, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_hubeau <- dplyr::select(data_ars_not_hubeau, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_hubeau) <- gsub("\\.x$", "", - names(data_ars_not_hubeau)) -``` - -## Consolidation des stations Hub'eau - -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : -```{r consolidate_stations_hubeau, eval=FALSE} -stations_eso_hubeau <- data_hubeau_eso |> - dplyr::rename(code_station = bss_id, - libelle_station = nom_commune, - date_creation = date_debut_mesure, - code_commune = code_insee) |> - dplyr::mutate(code_sise_eaux = "", - source = "HUBEAU") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) - -# Convertir les dates de la variable date_creation -stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : -```{r consolidate_stations_ars, eval=FALSE} -stations_eso_ars <- data_ars_not_hubeau |> - dplyr::rename(code_station = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge_stations, eval=FALSE} -station_eso <- dplyr::bind_rows(stations_eso_hubeau, stations_eso_ars) -``` - -# Ajout des champs manquants au dataframe station_eso - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : -```{r load_sage, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_eso` : -```{r update_code_sage, eval=FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : -```{r get_duplicates_code_sage, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_eso, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel, à exécuter si le tibble comporte des lignes) : -```{r delete_station_duplicates_code_sage, eval=FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : -```{r replace_code_sage_na, eval=FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : -```{r load_bassin-versant, eval=FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_eso` : -```{r update_codes_bassin_versant_masse_eau, eval=FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -## Ajout du `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : -```{r load_captage_prioritaire, eval=FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire -```{r update_captage_prioriaire, eval=FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_eso <- station_eso |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_bss) -``` - -## Mise à jour du code_sise_eaux à partir des données ARS - -Remplacer les valeurs vides dans `code_station` par NA dans `station_eso` : -```{r na_code_sise_eaux, eval=FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) -``` - -```{r update_codes_sise_eaux, eval=FALSE} -# Supprimer l'objet géométrie du dataframe data_ars -data_ars_eso <- data_ars_eso |> - sf::st_drop_geometry() - -# Réaliser une jointure attributaire -station_eso <- station_eso |> - dplyr::left_join(data_ars_eso, by = c("code_station" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage -``` - -Identification des doublons générés par la jointure de récupération des `code_sise_eaux` : -```{r get_duplicates_code_sise_eaux, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sise_eaux <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire - doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - sf::st_drop_geometry() - station_eso_sans_geom <- station_eso |> sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(station_eso_sans_geom, by = "code_station") |> - dplyr::select(code_station, n, code_sise_eaux, libelle_station) - -# Visualiser les doublons -print(doublons_stations_code_sise_eaux) -``` - -Suppression des doublons : -```{r delete_duplicates_code_sise_eaux, eval=FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final -```{r select_station_eso_variables, eval=FALSE} -station_eso <- station_eso |> - dplyr::select(code_station, - code_sise_eaux, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive_old_table, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_eso", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get_comments_old_table, eval=FALSE} -station_eso_comments <- datalibaba::get_table_comments(table = "station_eso", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish_new_table, eval=FALSE} -datalibaba::poster_data(data = station_eso, - table = "station_eso", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish_new_table_comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de souterraines (source : ARS + Hub'eau, ", date_today, ")"), - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish_new_fields_comments, eval=FALSE} -datalibaba::post_dico_attr(dico = station_eso_comments, - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - -## Mise à jour du skeleton - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations ESO", - template_dir = "update_station_eso", - template_description = "Mise à jour des stations ESO", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_station_eso.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_station_eso/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_station_eso.Rmd", vignette_name = "Mise à jour des stations ESO") -``` - diff --git a/dev/flat_update_station_esu.Rmd b/dev/flat_update_station_esu.Rmd deleted file mode 100644 index 6a70e0b3ffc3b0ce8c306bf0b58f1c2493849e1a..0000000000000000000000000000000000000000 --- a/dev/flat_update_station_esu.Rmd +++ /dev/null @@ -1,403 +0,0 @@ ---- -title: "Mise à jour des stations ESU" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(collectr) -library(datalibaba) -library(dplyr) -library(nngeo) -library(sf) -library(usethis) - -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser les **stations de mesure eau de surface (ESU)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `sandre.n_station_mesure_eaux_surface_loire_bretagne` (source : SANDRE) -- `captages.n_captage_p_r52` (source : ARS) - -# Chargement des lot de données source - -## Stations de mesure de la qualité des eaux superficielles continentales (STQ) -```{r load-hubeau_qualite_rivieres_station_pc, eval=FALSE} -data_sandre <- datalibaba::importer_data( - table = "n_station_mesure_eaux_surface_loire_bretagne", - schema = "sandre", - db = "si_eau") -``` - -## Captages ARS ESU -```{r load_captages_ars_esu, eval=FALSE} -data_ars_esu <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESU') -``` - -Suppression des géométries vides : -```{r delete-empty-geom, eval=FALSE} -data_ars_with_geom = data_ars_esu[!sf::st_is_empty(data_ars_esu),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de SANDRE - -```{r select-captages-ars-not-hubeau, eval=FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_sandre <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_sandre, by = c("code_captage" = "code_station")) - -# Récupérer les géométries par jointure avec stations_esu_ars -data_ars_not_sandre <- data_ars_not_sandre |> - dplyr::left_join(data_ars, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_sandre <- dplyr::select(data_ars_not_sandre, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_sandre) <- gsub("\\.x$", "", - names(data_ars_not_sandre)) -``` - -## Consolidation des stations SANDRE - -Sélection des variables et ajout de la source : -```{r consolidate-stations_hubeau, eval=FALSE} -stations_esu_sandre <- data_sandre |> - dplyr::mutate(source = "SANDRE") |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_commune, - the_geom) - -# Convertir les dates de la variable date_creation -stations_esu_sandre$date_creation <- as.Date(stations_esu_sandre$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : -```{r consolidate-stations_ars, eval=FALSE} -stations_esu_ars <- data_ars_not_sandre |> - dplyr::rename(code_station = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge-stations, eval=FALSE} -station_esu <- dplyr::bind_rows(stations_esu_sandre, stations_esu_ars) -``` - -# Ajout des champs manquants au dataframe station_esu - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : -```{r load-sage, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_esu` : -```{r update-code-sage, eval=FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : -```{r get-station-duplicates-code_sage, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel) : -```{r delete-station-duplicates-code-sage, eval=FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : -```{r replace-code-sage-na, eval=FALSE} -station_esu <- station_esu |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : -```{r load-bassin-versant, eval=FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_esu` : -```{r update-codes-bassin-versant-masse-eau, eval=FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -Fusion des variables pour conserver un maximum de valeurs : -```{r merge-variables, eval=FALSE} -# Fusionner les variables code_masse_eau.x et code_masse_eau.y, code_eu_masse_eau.x et code_eu_masse_eau.y -station_esu <- station_esu |> - dplyr::mutate(code_masse_eau = dplyr::coalesce(code_masse_eau.x, code_masse_eau.y)) |> - dplyr::select(-code_masse_eau.x, -code_masse_eau.y) # Supprimer les colonnes inutiles -``` - -Identification des doublons générés par la superposition de périmètres dans la table des bassins versants : -```{r get_duplicates_code_bassin_versant, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_code_bassin_versant <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_bassin_versant_specifique_000, by = c("code_bassin_versant" = "code_bassin_versant_specifique")) |> - dplyr::select(code_station, n, libelle_station, code_bassin_versant, nom_bassin_versant_specifique, the_geom.x) - -# Visualiser les doublons -print(doublons_code_bassin_versant) -``` - -Suppression des doublons (optionnel) : -```{r delete_duplicates_code_bassin_versant, eval=FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -## Ajout du champs `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : -```{r load-captage-prioritaire, eval=FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire -```{r update-captage-prioriaire, eval=FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_esu <- station_esu |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_sise_eaux) -``` - -# Intersection des stations ESU avec les SAGE de la région et les limites régionales - -Chargement de la table des limites de la région : -```{r load-region, eval=FALSE} -n_region_exp_r52 <- datalibaba::importer_data( - table = "n_region_exp_r52", - schema = "adminexpress", - db = "referentiels" -) -``` - -Vérification des objets sf : -```{r st_as_sf, eval=FALSE} -# Vérifier que les deux dataframes sont en format 'sf' -station_esu <- sf::st_as_sf(station_esu) -n_sage_r52 <- sf::st_as_sf(n_sage_r52) -n_region_exp_r52 <- sf::st_as_sf(n_region_exp_r52) - -``` - -Création d'un polygone fusionnant SAGE et région : -```{r limit_sage, eval=FALSE} -# Identification des noms de colonnes communs aux deux objets -colonnes_communes <- intersect(names(n_region_exp_r52), names(n_sage_r52)) - -# Sélection des colonnes communes dans chaque objet -n_region_exp_r52 <- n_region_exp_r52[, colonnes_communes] -n_sage_r52 <- n_sage_r52[, colonnes_communes] - -# Combinaison des deux objets dans un seul objet sf -# (création d'une seule collection de géométries pour pouvoir les fusionner) -objets_combines <- rbind(n_region_exp_r52, n_sage_r52) - -# Agrégation de tous les polygones en un seul avec st_union() -# (si les polygones se chevauchent ou sont adjacents, ils seront fusionnés) -n_sage_r52_union <- sf::st_union(objets_combines) - -# Correction de la géométrie, pour s'assurer qu'elle est valide -n_sage_r52_valid <- sf::st_make_valid(n_sage_r52_union) - -# Suppresion des trous internes en récupérant uniquement la limite extérieure -n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) - -``` - -Sélection des stations ESU présentes dans les SAGE et la région : -```{r st_intersects_stations_sage, eval=FALSE} -# Filtrer les stations ESU présentes dans les SAGE de la région -station_esu <- sf::st_filter(station_esu, n_sage_r52_limit) - -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final -```{r select-station-esu-variables, eval=FALSE} -station_esu <- station_esu |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive-old-table, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_esu", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get-comments-old-table, eval=FALSE} -station_esu_comments <- datalibaba::get_table_comments(table = "station_esu", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish-new-table, eval=FALSE} -datalibaba::poster_data(data = station_esu, - table = "station_esu", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish-new-table-comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de surface (ESU) (source : ARS + SANDRE, ", date_today, ")"), - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish-new-fields-comments, eval=FALSE} -datalibaba::post_dico_attr(dico = station_esu_comments, - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - -```{r development-create-template, eval=FALSE} -# Créer l'arborescence et les fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations ESU", - template_dir = "update_station_esu", - template_description = "Mise à jour des stations ESU", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_station_esu.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_station_esu/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -options(rmarkdown.html_vignette.check_title = FALSE) -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_station_esu.Rmd", vignette_name = "Mise à jour des stations ESU") -``` - diff --git a/inst/rmarkdown/templates/update_captage/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_captage/skeleton/skeleton.Rmd deleted file mode 100644 index 4da19aa7f8d51130afd74e066f6ab29f04bb8977..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_captage/skeleton/skeleton.Rmd +++ /dev/null @@ -1,405 +0,0 @@ ---- -title: "Mise à jour des captages ARS" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(readxl) -library(lubridate) -library(dplyr) -library(utils) -library(collectr) -library(sf) -library(datalibaba) -library(glue) -library(usethis) - -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) - -``` - -# Objectif - -Actualiser **la table des captages de la région** (`captages.n_captage_p_r52`) -à partir d'un tableur au format Excel transmis annuellement par l'ARS. - -# Chargement des lots de données - -## Captages ARS (SISE-EAUX) - -### Chargement des captages du dernier livrable en date -L'export transmis par l'ARS est importé ainsi que la date du fichier (qui sera utilisée ultérieurement comme métadonnée) : -```{r load_data, eval=FALSE} -# Make the dataset file available to the current Rmd during development -pkgload::load_all(path = here::here(), export_all = FALSE) - -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/CAP_SISE_13_02_2024.xlsx" - -# Stocker la date de dernier enregistrement du fichier -last_modified_date <- format(file.info(file_path)$ctime,"%d/%m/%Y") - -# Lire le fichier Excel dans un dataframe -data <- readxl::read_excel(file_path) - -# Vérifier le type de données dans la colonne "INS - Début d'usage - Date" -str(data) - -# Convertir la colonne "INS - Début d'usage - Date" en numérique -data <- data |> - dplyr::mutate(`INS - Début d'usage - Date` = as.numeric(`INS - Début d'usage - Date`)) - -# Convertir les valeurs numériques en dates -data <- data |> - dplyr::mutate(`INS - Début d'usage - Date` = as.Date(`INS - Début d'usage - Date`, origin = "1899-12-30")) - -``` - -### Renommage des variables - -Les variables de l'export sont renommées pour correspondre aux champs de la -table en base : -```{r consolidate_data, eval=FALSE} -captage <- data |> - dplyr::rename(departement_captage = "INS - Dépt gest - Code", - code_unite_gestion = "UGE - Code national", - nom_unite_gestion = "UGE - Nom", - code_captage = "INS - Code national", - nom_captage = "INS - Nom", - type_installation = "INS - Type - Code", - nature_eau_captage = "INS - Nature de l'eau - Code", - usage_captage = "INS - Usage direct - Code", - etat_installation = "INS - Etat - Code", - date_etat_installation = "INS - Début d'usage - Date", - code_responsable_suivi = "INS - Resp. suivi - Code", - motif_abandon = "INS - Motif d'abandon - Libellé", - code_commune_captage = "COM - Code INSEE (5 car)", - nom_commune_captage = "COM - Nom", - code_bss = "CAP - BSS - Code", - designation_bss = "CAP - BSS - Désignation", - coordonnee_x = "PSV - Coordonnée X", - coordonnee_y = "PSV - Coordonnée Y", - coordonnee_z = "PSV - Coordonnée Z", - debit_moyen_m3j = "INS - Débit moyen/jour - m3/j") - -``` - -## Captages ARS (SISE-EAUX) gérés par un autre département -:warning: On récupère de façon temporaire ces captages (principalement gérés -par le 35) dans un livrable plus ancien car ils ne sont pas disponibles dans -la livraison la plus récente. il faut donc vérifier le contenu du livrable -avant d'exécuter le chunk suivant, après chaque livraison. - -### Chargement des captages manquants -```{r load_missing_data, eval=FALSE} -# Make the dataset file available to the current Rmd during development -pkgload::load_all(path = here::here(), export_all = FALSE) - -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/@archives/CAP_SISE_11_11_2020.xlsx" - -# Lire le fichier Excel dans un dataframe et filtrer pour ne conserver que les enregistrements du 35 -missing_data <- readxl::read_excel(file_path, skip = 5) |> - dplyr::filter(`Dpt Gest.` == "035") - -``` - -### Renommage et sélection des variables -```{r load_missing_data, eval=FALSE} -# Adapter le format du dataframe pour le fusionner avec les données plus récentes -captage_035 <- missing_data |> - dplyr::rename(departement_captage = "Dpt Gest.", - code_unite_gestion = "UGE - Code", - nom_unite_gestion = "UGE - Nom", - code_captage = "Code CAP", - nom_captage = "Nom Captage", - type_installation = "Type ins", - nature_eau_captage = "NatEau", - usage_captage = "Usage", - etat_installation = "Etat", - date_etat_installation = "DébUsage", - motif_abandon = "Motif abandon", - code_commune_captage = "Com Code", - nom_commune_captage = "Com Nom", - code_bss = "BSS code", - designation_bss = "Dés. BSS", - coordonnee_x = "X - Lbt2e", - coordonnee_y = "Y - Lbt2e", - coordonnee_z = "Z", - debit_moyen_m3j = "moy m3/j") |> - dplyr::mutate(date_etat_installation = as.Date(date_etat_installation), - code_responsable_suivi = NA, - code_commune_captage = as.character(code_commune_captage) - ) |> - dplyr::select( - departement_captage, - code_unite_gestion, - nom_unite_gestion, - code_captage, - nom_captage, - type_installation, - nature_eau_captage, - usage_captage, - etat_installation, - date_etat_installation, - code_responsable_suivi, - motif_abandon, - code_commune_captage, - nom_commune_captage, - code_bss, - designation_bss, - coordonnee_x, - coordonnee_y, - coordonnee_z, - debit_moyen_m3j - ) - - -``` - -## Fusion des deux dataframes - -On rassemble les données des dataframes `captage` `captage_035` pour disposer -du référentiel le plus complet possible : -```{r merge_captages, eval=FALSE} -# Fusionner les deux dataframes -captage_full <- dplyr::bind_rows(captage, captage_035) |> - dplyr::arrange(code_captage) - -``` - -# Consolidation du dataframe - -## Mise à jour du code BSS - -Chargement de la table de passage des codes BSS anciens à nouveaux : -```{r load_table_passage_bss, eval=FALSE} -# Charger la table `captages.table_de_passage_bss_000` -table_de_passage_bss_000 <- datalibaba::importer_data( - table = "table_de_passage_bss_000", - schema = "captages", - db = "si_eau", - user = "admin" -) - -``` - -Les anciens codes BSS de l'export transmis par l'ARS sont remplacés par les -nouveaux codes issus de la table de passage fournie par le BRGM lorsque la -jointure est possible : -```{r update_code_bss, eval=FALSE} -# Mettre à jour la variable `code_bss` du dataframe `captage` -captage_bss <- captage_full |> - dplyr::left_join(table_de_passage_bss_000, by = c("code_bss" = "indice")) |> - dplyr::mutate(code_bss = ifelse(!is.na(nouvel_identifiant), nouvel_identifiant, code_bss)) |> - dplyr::select(departement_captage:debit_moyen_m3j) - -``` - -Vérification des résultats de la jointure : -```{r dev-count_empty_bss, eval=FALSE} -# Compter le nombre de valeurs vides dans captage_full -nb_code_bss_vide_captage <- captage_full |> - dplyr::summarise(nb_code_bss_vide = sum(is.na(code_bss))) - -# Compter le nombre de valeurs vides dans captage_bss -nb_code_bss_vide_captage_bss <- captage_bss |> - dplyr::summarise(nb_code_bss_vide = sum(is.na(code_bss))) - -# Afficher les résultats -print(nb_code_bss_vide_captage) -print(nb_code_bss_vide_captage_bss) -``` - -Sélection des captages ESO sans codes BSS malgré la jointure : -```{r select_captage_eso_sans_code_bss, eval=FALSE} -captage_eso_sans_code_bss <- captage_bss |> - dplyr::filter(!grepl("^BSS", code_bss) & nature_eau_captage == "ESO") -``` - -```{r save_captage_eso_sans_code_bss, eval=FALSE} -# Enregistrer le dataframe captage_sans_geom dans un fichier CSV -utils::write.csv(captage_eso_sans_code_bss, - file = "data/captage_eso_sans_code_bss.csv", - row.names = FALSE) - -# Afficher un message de confirmation -cat("Le fichier captage_eso_sans_code_bss.csv a été enregistré avec succès.\n") -``` - -## Vérification de la correspondance des variables avec les champs stockés en base - -À ce stade, la vérification doit faire ressortir l'absence de géométrie (champs `the_geom`) : -```{r check_attributes_n_captage_p_r52, eval=FALSE} -# Comparer la structure du dataframe avec celle de la table en base -collectr::check_structure_table(dataframe = captage, - database = "si_eau", - table = "n_captage_p_r52", - schema = "captages", - role = "admin") - -``` - -## Création d'un dataframe avec les enregistrements sans coordonnées ou des coordonées erronées - -Filtrage des enregistrements sans coordonnées valides (avec une valeur NA, 1 ou 3) : -```{r filter_captage_sans_geom, eval=FALSE} -# Créer un nouveau dataframe avec les captages sans coordonnées valides -captage_sans_geom <- captage_bss |> - dplyr::mutate(coordonnee_x = ifelse(coordonnee_x %in% c(1, 3), NA, coordonnee_x), - coordonnee_y = ifelse(coordonnee_y %in% c(1, 3), NA, coordonnee_y)) |> - dplyr::filter(is.na(coordonnee_x) | is.na(coordonnee_y)) - -``` - -```{r save_captage_sans_geom, eval=FALSE} -# Enregistrer le dataframe captage_sans_geom dans un fichier CSV -utils::write.csv(captage_sans_geom, - file = "data/captage_sans_geom.csv", - row.names = FALSE) - -# Afficher un message de confirmation -cat("Le fichier captage_sans_geom.csv a été enregistré avec succès.\n") - -``` - -## Encodage de la géométrie - -Suppression des enregistrements sans coordonnées valides avant encodage : -```{r create_geom, eval=FALSE} -# Supprimer les lignes sans coordonnées du dataframe d'origine -captage_with_xy <- captage_bss |> - dplyr::mutate(coordonnee_x = ifelse(coordonnee_x %in% c(1, 3), NA, coordonnee_x), - coordonnee_y = ifelse(coordonnee_y %in% c(1, 3), NA, coordonnee_y)) |> - dplyr::filter(!is.na(coordonnee_x) & !is.na(coordonnee_y)) - -# Créer une géométrie ponctuelle à partir de coordonnee_x et coordonnee_y -captage_geom <- sf::st_as_sf(captage_with_xy, - coords = c("coordonnee_x", "coordonnee_y"), - crs = 2154, - remove = FALSE) |> - dplyr::rename(the_geom = geometry) - -``` - -## Fusion des deux dataframes avec et sans géométrie - -Reconstitution du lot de données complet (avec et sans géométrie valide) : -```{r merge_dataframes, eval=FALSE} -n_captage_p_r52 <- dplyr::bind_rows(captage_geom, captage_sans_geom) - -``` - -# Publication de la table en base - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive_old_table, eval=FALSE} -collectr::archive_table(database = "si_eau", - table = "n_captage_p_r52", - schema = "captages", - new_schema = "zz_archives", - role = "admin") - -``` - -## Ajout de la contrainté géomatique concernant le type de géométries - -```{r dev-update_geometry_n_captage_p_r52} -# Connexion à la base de données PostgreSQL -connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") - -# Requête SQL pour ajouter la contrainte à la colonne the_geom -constraint_query <- -"ALTER TABLE captages.n_captage_p_r52 -ADD CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text OR geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL);" - -# Exécution de la requête ALTER TABLE -DBI::dbExecute(connexion, constraint_query) - -# Fermeture de la connexion -DBI::dbDisconnect(connexion) - -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get_comments_old_table, eval=FALSE} -n_captage_p_r52_comments <- datalibaba::get_table_comments(table = "n_captage_p_r52", - schema = "captages", - db = "si_eau", - user = "admin") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) - -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish_new_table, eval=FALSE} -datalibaba::poster_data(data = n_captage_p_r52, - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau", - pk = "code_captage", - overwrite = TRUE, - user = "admin") - -``` - -## Publication de la description de la table actualisée - -```{r publish_new_table_comment, eval=FALSE} -datalibaba::commenter_table( - comment = glue::glue("Captages de la région Pays de la Loire (source : ARS, ", last_modified_date, ")"), - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau", - user = "admin") - -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish_new_fields_comments, eval=FALSE} -datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau", - user = "admin") - -``` - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des captages ARS", - template_dir = "update_captage", - template_description = "Mise à jour des captages ARS", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_captage.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_captage/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Keep eval=FALSE to avoid infinite loop in case you hit the knit button -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_captage.Rmd", vignette_name = "Mise à jour des captages ARS") -``` diff --git a/inst/rmarkdown/templates/update_captage/template.yaml b/inst/rmarkdown/templates/update_captage/template.yaml deleted file mode 100644 index cc0a8d00a56a9511dd63d171439662f15b248dc2..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_captage/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des captages ARS -description: > - Mise à jour des captages ARS -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_captage_ep/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_captage_ep/skeleton/skeleton.Rmd deleted file mode 100644 index 6fa4c6ed731816fbea234d377403ed301bd8d1a2..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_captage_ep/skeleton/skeleton.Rmd +++ /dev/null @@ -1,144 +0,0 @@ ---- -title: "Mise à jour des captages en eau potable" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(datalibaba) -library(dplyr) -library(collectr) -library(glue) -library(usethis) -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser **la table des captages en eau potable de la région** (`captages.n_captage_eau_potable_p_r52`) à partir de la table des captages de l'ARS (`captages.n_captage_p_r52`). - -# Création du dataframe des captages en eau potable - -## Chargement de la table des captages - -```{r load-captage, eval=FALSE} -n_captage_p_r52 <- datalibaba::importer_data(db = "si_eau", - schema = "captages", - table = "n_captage_p_r52") -``` - -## Filtre sur les captages en eau potable - -Les enregistrements correspondant aux valeurs suivantes pour les usages sont sélectionnés : - -- `AEP` : ADDUCTION COLLECTIVE PUBLIQUE -- `ALI` : ACTIVITE AGRO ALIMENTAIRE -- `CND` : EAU CONDITIONNEE -- `PRV` : ADDUCTION COLLECTIVE PRIVEE - -Source : table `captages.n_captage_usage_direct` - -```{r filter-captage-ep, eval=FALSE} -n_captage_eau_potable_p_r52 <- n_captage_p_r52 |> - dplyr::filter(usage_captage %in% c('AEP', 'PRV', 'ALI', 'CND')) -``` - -# Publication de la table en base - -## Vérification de la correspondance des variables avec les champs stockés en base - -```{r check-attributes, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::check_structure_table(connexion, - df = n_captage_eau_potable_p_r52, - table_name = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable") -``` - -## Archivage de la version précédente de la table - -```{r archive-old-table, eval=FALSE} -collectr::archive_table(database = "si_eau", - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get-comments-old-table, eval=FALSE} -n_captage_eau_potable_p_r52_comments <- datalibaba::get_table_comments( - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -```{r publish-new-table, eval=FALSE} -datalibaba::poster_data(data = n_captage_eau_potable_p_r52, - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau", - pk = "code_captage", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish-new-table-comment, eval=FALSE} -datalibaba::commenter_table( - comment = glue::glue("Points de prélèvement en eau potable de la région Pays de la Loire (source : ARS, ", last_modified_date, ")"), - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau", - user= "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish-new-fields-comments, eval=FALSE} -datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau", - user = "admin" - ) -``` - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des captages en eau potable", - template_dir = "update_captage_ep", - template_description = "Mise à jour des captages en eau potable", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_captage_ep.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_captage_ep/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_captage_ep.Rmd", vignette_name = "Mise à jour des captages en eau potable") -``` - diff --git a/inst/rmarkdown/templates/update_captage_ep/template.yaml b/inst/rmarkdown/templates/update_captage_ep/template.yaml deleted file mode 100644 index 66bf0728f58799cfdecb73df8c2ac7ce288c10fa..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_captage_ep/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des captages en eau potable -description: > - Mise à jour des captages en eau potable -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/skeleton/skeleton.Rmd deleted file mode 100644 index 46d30a67afbc7ca3229050a6a36ef82c30110d00..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/skeleton/skeleton.Rmd +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: "Mise à jour des stations Hub'eau nappes d'eau souterraine" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(hubeau) -library(sf) -library(dplyr) -library(usethis) - -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) - -``` - -# Objectif - -Actualiser les **stations de mesure des qualités des nappes d'eau souterraine (ESO)** à partir de l'[API Hub'eau "Qualité des nappes d'eau souterraine"](https://hubeau.eaufrance.fr/page/api-qualite-nappes) dans une base de données PostgreSQL. - -# Création du dataframe - -## Collecte des données - -Téléchargement des données du bassin Loire-Bretagne : -```{r get_hubeau_qualite_nappes_stations_lb, eval=FALSE} -hubeau_qualite_nappes_stations_lb <- hubeau::get_qualite_nappes_stations( - circonscription_administrative_bassin="Loire-Bretagne") - -``` - -Téléchargement des données du bassin Seine-Normandie en Mayenne : -```{r get_hubeau_qualite_nappes_stations_53, eval=FALSE} -hubeau_qualite_nappes_stations_53 <- hubeau::get_qualite_nappes_stations( - circonscription_administrative_bassin="Seine-Normandie",num_departement="53") - -``` - -Fusion des deux dataframes : -```{r merge_hubeau_qualite_nappes_stations, eval=FALSE} -hubeau_qualite_nappes_stations <- dplyr::bind_rows( - hubeau_qualite_nappes_stations_lb, hubeau_qualite_nappes_stations_53) - -``` - -## Création d'un champs de géométrie - -```{r create_the_geom, eval=FALSE} -# Création de la géométrie -hubeau_sf <- create_hubeau_geom(hubeau_qualite_nappes_stations) - -``` - -# Publication de la table en base - -## Archivage de la version précédente de la table - -La version précédente de la table est stockée dans un schéma d'archive : -```{r archive_old_table, eval=FALSE} -# connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - new_schema = "zz_archives", - role = "admin") - -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish_new_table, eval=FALSE} -datalibaba::poster_data(data = hubeau_sf, - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau", - pk = "bss_id", - overwrite = TRUE, - user = "admin") - -``` - -## Publication de la description de la table actualisée - -```{r publish_new_table_comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Stations de mesure des qualités des nappes d'eau souterraine (ESO) - Bassin Loire-Bretagne (source : Hub'eau)"), - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau", - user = "admin" -) - -``` - -## Ajout des commentaires - -```{r add_comments, eval=FALSE} -# Création d'une liste avec les noms des variables et leurs descriptions -variables <- c( - "bss_id", "Nouveau code national de la station, cf plus d'info ici http://infoterre.brgm.fr/nouveau-code-bss", - "code_bss", "Ancien code de la station (code BSS)", - "urn_bss", "URN de la station", - "date_debut_mesure", "Date de début des mesures qualité sur cette station", - "date_fin_mesure", "Dernière date de mesure qualité connue pour sur cette station", - "precision_coordonnees", "Précision des coordonnées sur cette station", - "longitude", "Longitude la station (WGS84)", - "latitude", "Latitude la station (WGS84)", - "altitude", "Altitude NGF de la station", - "code_insee", "Code insee de la commune où se trouve la station", - "nom_commune", "Nom de la commune où se trouve la station", - "num_departement", "Code du département où se trouve la station", - "nom_departement", "Nom du département où se trouve la station", - "nom_region", "Nom nouvelle région où se trouve la station", - "circonscriptions_administrative_bassin", "Circonscription administrative de bassin concernée", - "bassin_dce", "Bassin DCE", - "urn_bassin_dce", "URN du bassin DCE", - "code_nature_pe", "Code de la nature du point d'eau (forage, puits, source)", - "nom_nature_pe", "Nom de la nature du point d'eau (forage, puits, source)", - "uri_nature_pe", "URI de la nature du point d'eau (forage, puits, source)", - "libelle_pe", "Libellé du point d'eau", - "code_caracteristique_aquifere", "Code des caractéristiques de l'aquifère au droit du point d'eau", - "nom_caracteristique_aquifere", "Nom des caractéristiques de l'aquifère au droit du point d'eau", - "uri_caracteristique_aquifere", "URI des caractéristiques de l'aquifère au droit du point d'eau", - "code_etat_pe", "Code de l'état du point d'eau", - "nom_etat_pe", "Nom de l'état du point d'eau", - "uri_etat_pe", "URI de l'état du point d'eau", - "code_mode_gisement", "Code du mode de gisement du point d'eau", - "nom_mode_gisement", "Nom du mode de gisement du point d'eau", - "uri_mode_gisement", "URI du mode de gisement du point d'eau", - "profondeur_investigation", "Profondeur d'investigation (m)", - "commentaire_pe", "Commentaire sur le point d'eau", - "codes_entite_hg_bdlisa1", "Entité hydrogéologique dans le référentiel bdlisa", - "codes_entite_hg_bdlisa2", "Entité hydrogéologique dans le référentiel bdlisa", - "codes_entite_hg_bdlisa3", "Entité hydrogéologique dans le référentiel bdlisa", - "noms_entite_hg_bdlisa1", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "noms_entite_hg_bdlisa2", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "noms_entite_hg_bdlisa3", "Noms des entités hydrogéologiques liées au point d'eau dans le référentiel bdlisa", - "urns_bdlisa1", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "urns_bdlisa2", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "urns_bdlisa3", "URN des entités hydrogéologiques (BDLISA) actuellement associés à la station construit à partir des codes BDLISA, url vers les fiches PDF BDLISA", - "codes_masse_eau_rap1", "Codes Masses d'eau de type Rapportage", - "codes_masse_eau_rap2", "Codes Masses d'eau de type Rapportage", - "noms_masse_eau_rap1", "Noms des masses d'eau de type 'rapportage' liées au point d'eau", - "noms_masse_eau_rap2", "Noms des masses d'eau de type 'rapportage' liées au point d'eau", - "urns_masse_eau_rap1", "URN des masse d'eau RAP actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "urns_masse_eau_rap2", "URN des masse d'eau RAP actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "codes_masse_eau_edl1", "Codes Masses d'eau de type Etat des lieux", - "codes_masse_eau_edl2", "Codes Masses d'eau de type Etat des lieux", - "noms_masse_eau_edl1", "Noms des masses d'eau de type 'état des lieux' liées au point d'eau", - "noms_masse_eau_edl2", "Noms des masses d'eau de type 'état des lieux' liées au point d'eau", - "urns_masse_eau_edl1", "URN des masse d'eau EDL actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "urns_masse_eau_edl2", "URN des masse d'eau EDL actuellement associés à la station construit à partir des codes masse d'eau, url vers le SANDRE", - "codes_reseau1", "Réseaux de mesure concernés", - "codes_reseau2", "Réseaux de mesure concernés", - "codes_reseau3", "Réseaux de mesure concernés", - "codes_reseau4", "Réseaux de mesure concernés", - "codes_reseau5", "Réseaux de mesure concernés", - "codes_reseau6", "Réseaux de mesure concernés", - "codes_reseau7", "Réseaux de mesure concernés", - "codes_reseau8", "Réseaux de mesure concernés", - "codes_reseau9", "Réseaux de mesure concernés", - "codes_reseau10", "Réseaux de mesure concernés", - "codes_reseau11", "Réseaux de mesure concernés", - "codes_reseau12", "Réseaux de mesure concernés", - "codes_reseau13", "Réseaux de mesure concernés", - "codes_reseau14", "Réseaux de mesure concernés", - "codes_reseau15", "Réseaux de mesure concernés", - "noms_reseau1", "Noms des réseaux de mesure concernés", - "noms_reseau2", "Noms des réseaux de mesure concernés", - "noms_reseau3", "Noms des réseaux de mesure concernés", - "noms_reseau4", "Noms des réseaux de mesure concernés", - "noms_reseau5", "Noms des réseaux de mesure concernés", - "noms_reseau6", "Noms des réseaux de mesure concernés", - "noms_reseau7", "Noms des réseaux de mesure concernés", - "noms_reseau8", "Noms des réseaux de mesure concernés", - "noms_reseau9", "Noms des réseaux de mesure concernés", - "noms_reseau10", "Noms des réseaux de mesure concernés", - "noms_reseau11", "Noms des réseaux de mesure concernés", - "noms_reseau12", "Noms des réseaux de mesure concernés", - "noms_reseau13", "Noms des réseaux de mesure concernés", - "noms_reseau14", "Noms des réseaux de mesure concernés", - "noms_reseau15", "Noms des réseaux de mesure concernés", - "uris_reseau1", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau2", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau3", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau4", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau5", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau6", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau7", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau8", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau9", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau10", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau11", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau12", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau13", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau14", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "uris_reseau15", "URI des réseaux associés à la station construit à partir des codes réseau, url vers le SANDRE", - "geometry_type", "Type de géométrie", - "geometry_crs_type", "Type de valeur du système de référence spatial", - "geometry_crs_properties_name", "Système de référence spatial", - "the_geom", "Géométrie de la station de mesure" -) - -# Créer le dataframe avec les variables -comments <- data.frame( - nom_variable = variables[seq(1, length(variables), by = 2)], - libelle_variable = variables[seq(2, length(variables), by = 2)], - stringsAsFactors = FALSE -) - -# Publier le dictionnaire de données -datalibaba::post_dico_attr( - dico = comments, - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau", - user = "admin" -) - -``` - -```{r development_create_template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations Hub'eau nappes d'eau souterraine", - template_dir = "update_hubeau_qualite_nappe_station", - template_description = "Mise à jour des stations Hub'eau nappes d'eau souterraine", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_hubeau_qualite_nappe_station.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") - -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_nappe_station.Rmd", vignette_name = "Mise à jour des stations Hub'eau nappes d'eau souterraine") - -``` - diff --git a/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/template.yaml b/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/template.yaml deleted file mode 100644 index 0d5515589809fd5d52100e29c87424ff47de15e0..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_hubeau_qualite_nappe_station/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des stations Hub'eau nappes d'eau souterraine -description: > - Mise à jour des stations Hub'eau nappes d'eau souterraine -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/skeleton/skeleton.Rmd deleted file mode 100644 index 1cf08bebb94dcba8e9a0d89cc2ed3129884020a3..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/skeleton/skeleton.Rmd +++ /dev/null @@ -1,192 +0,0 @@ ---- -title: "Mise à jour des stations Hub'eau cours d'eau et plan d'eau" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(hubeau) -library(sf) -library(dplyr) -library(usethis) -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser les **stations de mesures physicochimique sur des cours d'eau et plan d'eau** à partir de l'[API Hub'eau "Qualité des cours d'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans une base de données PostgreSQL. - -# Création du dataframe - -## Récupération des données - -Téléchargement du lot de données avec l'identifiant de la région : -```{r get-qualite-nappes-stations, eval=FALSE} -hubeau_qualite_rivieres_station_pc <- hubeau::get_qualite_rivieres_station_pc(code_region="52") -``` - -## Création d'un champs de géométrie - -```{r create-the-geom, eval=FALSE} -# Création de la géométrie -hubeau_sf <- create_hubeau_geom(hubeau_qualite_rivieres_station_pc) -``` - -## Remplacement des caractères accentués impactés par un problème d'encodage -Dans la variable `libelle_station` : -```{r replace-encoding-problems, eval=FALSE} -# Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<e0>", "À", hubeau_sf$libelle_station) -# Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c0>", "À", hubeau_sf$libelle_station) -# Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c8>", "È", hubeau_sf$libelle_station) -# Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c9>", "É", hubeau_sf$libelle_station) -# Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c2>", "Â", hubeau_sf$libelle_station) -# Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<d4>", "Ô", hubeau_sf$libelle_station) -``` - -# Publication de la table en base - -## Archivage de la version précédente de la table - -La version précédente de la table est stockée dans un schéma d'archive : -```{r archive-old-table, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "hubeau_qualite_rivieres_station_pc", - schema = "qualite_cours_d_eau", - new_schema = "zz_archives", - role = "admin") -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish-new-table, eval=FALSE} -datalibaba::poster_data(data = hubeau_sf, - table = "hubeau_qualite_rivieres_station_pc", - schema = "qualite_cours_d_eau", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish-new-table-comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Stations de mesures physicochimique sur des cours d'eau et plan d'eau (eau de surface : ESU) (source : Hub'eau)"), - table = "hubeau_qualite_rivieres_station_pc", - schema = "qualite_cours_d_eau", - db = "si_eau", - user = "admin" -) -``` - -## Ajout des commentaires - -```{r add-comments, eval=FALSE} -# Création d'une liste avec les noms des variables et leurs descriptions -variables <- c( - "code_station", "Code Sandre de la station de mesure. dans le référentiel national Sandre Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/stq.json", - "libelle_station", "Libellé Sandre de la station de mesure", - "uri_station", "URI station Sandre", - "durete", "Dureté moyenne de l'eau", - "coordonnee_x", "Coordonnée X du point caractéristique de la station de mesure", - "coordonnee_y", "Coordonnée Y du point caractéristique de la station de mesure", - "code_projection", "Code Sandre du système de projection des coordonnées de la station de mesure", - "libelle_projection", "Libellé Sandre du système de projection des coordonnées de la station de mesure", - "longitude", "Longitude la station de mesure dans le système de coordonnées WGS84", - "latitude", "Latitude de la station de mesure dans le système de coordonnées WGS84", - "code_commune", "Code INSEE de la commune de rattachement de la station de mesure", - "libelle_commune", "Libellé de la commune de rattachement de la station de mesure", - "code_departement", "Code INSEE du département de rattachement de la station de mesure", - "libelle_departement", "Libellé du département de rattachement de la station de mesure", - "code_region", "Code INSEE de la région de rattachement de la station de mesure", - "libelle_region", "Libellé INSEE de la région de rattachement de la station de mesure", - "code_cours_eau", "Code Sandre de l'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/cea.json (cours d'eau) et https://api.sandre.eaufrance.fr/referentiels/v1/pla.json (plan d'eau)", - "nom_cours_eau", "Libellé long Sandre de l'entité hydrographique associée à la station de mesure", - "uri_cours_eau", "URI du cours d'eau", - "nom_masse_deau", "Libellé de la masse d'eau de rattachement de la station de mesure", - "code_masse_deau", "Code national de la masse d'eau associé à la station de mesure", - "code_eu_masse_deau", "Code européen de la masse d'eau associé à la station de mesure", - "uri_masse_deau", "URI national de la masse d'eau de la station de mesure", - "code_eu_sous_bassin", "Code européen du sous-bassin DCE administratif", - "nom_sous_bassin", "Libellé du sous bassin DCE administratif", - "uri_sous_bassin", "URI du sous-bassin DCE", - "code_bassin", "Code national du bassin DCE", - "code_eu_bassin", "Code européen du bassin DCE", - "nom_bassin", "Libellé du bassin DCE", - "uri_bassin", "URI du bassin DCE", - "type_entite_hydro", "Code Sandre de la nature d'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/796.json", - "commentaire", "Commentaire sur la station de mesure", - "date_creation", "Date de création de la station de mesure", - "date_arret", "Date d'arrêt d'activité de la station de mesure", - "date_maj_information", "Date de mise à jour des informations sur la station de mesure", - "finalite", "Code Sandre de la finalité de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/645.json", - "localisation_precise", "Localisation précise de la station de mesure", - "nature", "Code Sandre de la nature de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/62.json", - "altitude_point_caracteristique", "Altitude du point caractéristique de la station de mesure", - "point_kilometrique", "Pk du point caractéristique sur le tronçon de l'entité hydrographique principale associée à la station de mesure", - "premier_mois_annee_etiage", "Premier mois de l'année d'étiage de la station de mesure", - "superficie_bassin_versant_reel", "Superficie réelle du bassin versant réel", - "superficie_bassin_versant_topo", "Superficie topographique du bassin versant topographique", - "geometry_type", "Type de géométrie", - "geometry_crs_type", "Type de valeur du système de référence spatial", - "geometry_crs_properties_name", "Système de référence spatial", - "the_geom", "Géométrie de la station de mesure" -) - -# Créer le dataframe avec les variables -comments <- data.frame( - nom_variable = variables[seq(1, length(variables), by = 2)], - libelle_variable = variables[seq(2, length(variables), by = 2)], - stringsAsFactors = FALSE -) - -# Publier le dictionnaire de données -datalibaba::post_dico_attr( - dico = comments, - table = "hubeau_qualite_rivieres_station_pc", - schema = "qualite_cours_d_eau", - db = "si_eau", - user = "admin" -) -``` - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau", - template_dir = "update_hubeau_qualite_rivieres_station", - template_description = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd", vignette_name = "Mise à jour des stations Hub'eau cours d'eau et plan d'eau") -``` - diff --git a/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/template.yaml b/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/template.yaml deleted file mode 100644 index dc29026e0d9cd1002e6dbd11fa22cb37be2dfd73..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_hubeau_qualite_rivieres_station/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des stations Hub'eau cours d'eau et plan d'eau -description: > - Mise à jour des stations Hub'eau cours d'eau et plan d'eau -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_r_station_mesure_p_r52/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_r_station_mesure_p_r52/skeleton/skeleton.Rmd deleted file mode 100644 index b828966437dae5e4f412313c17e1c5b36eb35eef..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_r_station_mesure_p_r52/skeleton/skeleton.Rmd +++ /dev/null @@ -1,628 +0,0 @@ ---- -title: "Mise à jour des stations de mesure" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development, include=FALSE} -library(collectr) -library(datalibaba) -library(dplyr) -library(nngeo) -library(sf) -library(usethis) - -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) - -``` - -# Objectif - -Actualiser les **stations de mesure eau souterraine (ESO) et eau de surface (ESU)** -à partir des tables suivantes dans une base de données PostgreSQL : - -- `captages.n_captage_p_r52` (source : ARS, périmètre : région Pays de la Loire) -- `qualite_nappes_eau_souterraine.hubeau_qualite_nappes_stations` (source : Hub'eau, périmètre : bassin Loire-Bretagne) -- `sandre.n_station_mesure_eaux_surface_loire_bretagne` (source : SANDRE, périmètre : bassin Loire-Bretagne) - -# Chargement des lot de données source - -## Captages ARS - -Chargement de la table des captages ARS : -```{r load_captages_ars_eso, eval=FALSE} -data_ars <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau", - user = "admin") - -``` - -## Stations de mesure des qualités des nappes d'eau souterraine (ESO) - -Chargement de la table des stations ESO issues d'Hubeau : -```{r load_hubeau_qualite_nappes_stations, eval=FALSE} -data_eso_hubeau <- datalibaba::importer_data( - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau", - user = "admin") - -``` - -## Stations de mesure de la qualité des eaux superficielles continentales (STQ) - -Chargement de la table des stations ESU issues du SANDRE : -```{r load-hubeau_qualite_rivieres_station_pc, eval=FALSE} -data_esu_sandre <- datalibaba::importer_data( - table = "n_station_mesure_eaux_surface_loire_bretagne", - schema = "sandre", - db = "si_eau", - user = "admin") - -``` - -# Consolidation dans des dataframes similaire - -## Stations de mesure des qualités des nappes d'eau souterraine (ESO) - -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : -```{r consolidate_stations_hubeau_eso, eval=FALSE} -stations_eso_hubeau <- data_eso_hubeau |> - dplyr::rename(libelle_station = nom_commune, - date_creation = date_debut_mesure, - code_commune = code_insee) |> - dplyr::mutate(code_sise_eaux = NA, - source = "HUBEAU", - nature_eau = "ESO", - code_masse_eau = NA) |> - dplyr::select(code_bss = bss_id, - code_sise_eaux, - libelle_station, - nature_eau, - date_creation, - source, - code_masse_eau = codes_masse_eau_edl, - code_commune, - the_geom) - -# Convertir les dates de la variable date_creation -stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) - -``` - -Remplacer les valeurs vides dans `code_sise_eaux` par NA dans `stations_eso_hubeau` : -```{r na_code_sise_eaux, eval=FALSE} -stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) - -``` - -Réaliser la jointure sur la variable `code_bss` : -```{r update_code_sise_eaux, eval=FALSE} -# Supprimer l'objet géométrie du dataframe data_ars -data_ars_no_geom <- data_ars |> sf::st_drop_geometry() - -# Réaliser une jointure attributaire -stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::left_join(data_ars_no_geom, by = c("code_bss" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage -``` - -Identification des doublons générés par la jointure de récupération des `code_sise_eaux` : -```{r get_duplicates_code_sise_eaux, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sise_eaux <- stations_eso_hubeau |> - dplyr::group_by(code_bss) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire - doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - sf::st_drop_geometry() - stations_eso_hubeau_no_geom <- stations_eso_hubeau |> sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(stations_eso_hubeau_no_geom, by = "code_bss") |> - dplyr::select(code_bss, n, code_sise_eaux, libelle_station) - -# Visualiser les doublons -print(doublons_stations_code_sise_eaux) - -``` - -Suppression des doublons : -```{r delete_duplicates_code_sise_eaux, eval=FALSE} -stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::group_by(code_bss, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() - -``` - -## Stations de mesure de la qualité des eaux superficielles continentales (STQ) - -Sélection des variables et ajout de la source : -```{r consolidate_stations_esu_sandre, eval=FALSE} -stations_esu_sandre <- data_esu_sandre |> - dplyr::mutate(code_bss = NA, - source = "SANDRE", - nature_eau = "ESU") |> - dplyr::select(code_bss, - code_sise_eaux = code_station, - libelle_station, - date_creation, - nature_eau, - source, - code_masse_eau, - code_commune, - the_geom) - -# Convertir les dates de la variable date_creation -stations_esu_sandre$date_creation <- as.Date(stations_esu_sandre$date_creation) - -``` - -## Captages ARS - -Suppression des captages ARS avec des géométries vides : -```{r delete-empty-geom, eval=FALSE} -data_ars_with_geom = data_ars[!sf::st_is_empty(data_ars),,drop=FALSE] - -``` - -## Sélection des captages ARS différents des stations ESO de Hub'eau et des stations ESU du SANDRE - -```{r r select_captages_ars_not_hubeau_sandre, eval=FALSE} -# Fusion des opérations pour sélectionner les captages ARS différents des stations ESO Hub'eau et ESU SANDRE -stations_ars_not_hubeau_sandre <- data_ars_with_geom |> - # Supprimer la géométrie pour effectuer des jointures - sf::st_drop_geometry() |> - # Exclure les stations présentes dans stations_eso_hubeau et stations_esu_sandre - dplyr::anti_join(stations_eso_hubeau, by = c("code_bss" = "code_bss")) |> - dplyr::anti_join(stations_esu_sandre, by = c("code_captage" = "code_sise_eaux")) |> - # Récupérer les géométries par jointure avec data_ars - dplyr::left_join(data_ars, by = "code_captage") |> - # Désélectionner toutes les variables finissant par .y - dplyr::select(-ends_with(".y")) - -# Renommer les colonnes pour supprimer le suffixe .x -names(stations_ars_not_hubeau_sandre) <- gsub("\\.x$", "", names(stations_ars_not_hubeau_sandre)) - -``` - -## Consolidation des stations ARS - -Ajout de la source et sélection des variables : -```{r consolidate_stations_ars, eval=FALSE} -# Ajouter la variable `source` et sélectionner les variables nécessaires -stations_ars <- stations_ars_not_hubeau_sandre |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_bss = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - nature_eau = nature_eau_captage, - date_creation = date_etat_installation, - source, - code_commune = code_commune_captage, - the_geom) - -``` - -## Ajout du `code_masse_eau` pour les stations ARS - -Chargement de la table des bassins versants France entière : -```{r load_bassin_versant, eval=FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau", - user = "admin" -) - -``` - -Requête spatiale pour la jointure de la variable `code_masse_eau` -```{r update-codes-bassin-versant-masse-eau, eval=FALSE} -# Convertir le dataframe `stations_ars` en objet sf -stations_ars <- sf::st_as_sf(stations_ars, sf_column_name = "the_geom") - -# Réaliser une jointure spatiale pour le dataframe `stations_ars` -stations_ars <- stations_ars |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_masse_eau), join = sf::st_within, left = TRUE) - -``` - -## Fusion des trois dataframes - -```{r merge_stations, eval=FALSE} -station_full <- dplyr::bind_rows(stations_eso_hubeau, stations_esu_sandre, stations_ars) - -``` - -# Intersection des stations ESU avec les SAGE de la région et les limites régionales - -Chargement de la table des SAGE en Pays de la Loire : -```{r load_n_sage_r52, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Chargement de la table des limites de la région : -```{r load_n_region_exp_r52, eval=FALSE} -n_region_exp_r52 <- datalibaba::importer_data( - table = "n_region_exp_r52", - schema = "adminexpress", - db = "referentiels" -) -``` - -Vérification des objets sf : -```{r st_as_sf, eval=FALSE} -# Vérifier que les deux dataframes sont en format 'sf' -station_full <- sf::st_as_sf(station_full) -n_sage_r52 <- sf::st_as_sf(n_sage_r52) -n_region_exp_r52 <- sf::st_as_sf(n_region_exp_r52) - -``` - -Création d'un polygone fusionnant SAGE et région : -```{r limit_sage, eval=FALSE} -# Identification des noms de colonnes communs aux deux objets -colonnes_communes <- intersect(names(n_region_exp_r52), names(n_sage_r52)) - -# Sélection des colonnes communes dans chaque objet -n_region_exp_r52 <- n_region_exp_r52[, colonnes_communes] -n_sage_r52 <- n_sage_r52[, colonnes_communes] - -# Combinaison des deux objets dans un seul objet sf -# (création d'une seule collection de géométries pour pouvoir les fusionner) -objets_combines <- rbind(n_region_exp_r52, n_sage_r52) - -# Agrégation de tous les polygones en un seul avec st_union() -# (si les polygones se chevauchent ou sont adjacents, ils seront fusionnés) -n_sage_r52_union <- sf::st_union(objets_combines) - -# Correction de la géométrie, pour s'assurer qu'elle est valide -n_sage_r52_valid <- sf::st_make_valid(n_sage_r52_union) - -# Suppresion des trous internes en récupérant uniquement la limite extérieure -n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) - -``` - -Sélection des stations ESU présentes dans les SAGE et la région : -```{r st_intersects_stations_sage, eval=FALSE} -# Filtrer les stations ESU présentes dans les SAGE de la région -station_sage_r52 <- sf::st_filter(station_full, n_sage_r52_limit) - -``` - -# Ajout des variables manquantes nécessaires - -## Ajout de la variable `id_station` - -```{r add_id_station, eval=FALSE} -# Ajouter la variable `id_station` -station_sage_r52 <- station_sage_r52 |> - # Trier par code_commune - dplyr::arrange(code_commune) |> - # Ajouter un ID incrémental - dplyr::mutate(id_station = dplyr::row_number()) - -``` - - -## Ajout de la variable `code_naiades` -Cet ajout ne concerne que les stations ESU : -```{r add_code_naiades, eval=FALSE} -# Créer et alimenter la variable `code_naiades` à partir de `code_sise_eaux` -station_sage_r52 <- station_sage_r52 |> - dplyr::mutate( - code_naiades = dplyr::case_when( - startsWith(code_sise_eaux, "044") ~ sub("^044", "BS", code_sise_eaux), - startsWith(code_sise_eaux, "049") ~ sub("^049", "BX", code_sise_eaux), - startsWith(code_sise_eaux, "053") ~ sub("^053", "CB", code_sise_eaux), - NA ~ code_sise_eaux # Remplacer les autres codes par NA - )) - -``` - -## Ajout de la variable `code_bassin_versant` - -Jointure spatiale entre `n_bassin_versant_specifique_000` et `station_sage_r52` : -```{r add_codes_bassin_versant, eval=FALSE} -# Réaliser une jointure spatiale pour récupérer la variable `code_bassin_versant` -station_sage_r52 <- station_sage_r52 |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique), - join = sf::st_within, left = TRUE) - -``` - -Identification des doublons générés par la superposition de périmètres dans la table des bassins versants : -```{r get_duplicates_code_bassin_versant, eval=FALSE} -# Compter les occurrences de chaque id_station -doublons_code_bassin_versant <- station_sage_r52 |> - dplyr::group_by(id_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - dplyr::left_join(station_sage_r52, by = "id_station") |> - dplyr::left_join(n_bassin_versant_specifique_000, by = c("code_bassin_versant" = "code_bassin_versant_specifique")) |> - dplyr::select(id_station, n, libelle_station, code_bassin_versant, nom_bassin_versant_specifique, the_geom.x) - -# Visualiser les doublons -print(doublons_code_bassin_versant) - -``` - -Suppression des doublons (optionnel) : -```{r delete_duplicates_code_bassin_versant, eval=FALSE} -station_sage_r52 <- station_sage_r52 |> - dplyr::group_by(id_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() - -``` - -## Ajout de la variable `code_sage` - -Chargement de la table des SAGE en Pays de la Loire : -```{r load-sage, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau", - user = "admin" -) - -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_sage_r52` : -```{r add_code_sage, eval=FALSE} -# Réaliser une jointure spatiale -station_sage_r52 <- station_sage_r52 |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : -```{r get_station_duplicates_code_sage, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_sage_r52 |> - dplyr::group_by(id_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_sage_r52, by = "id_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(id_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel) : -```{r delete_station_duplicates_code_sage, eval=FALSE} -station_sage_r52 <- station_sage_r52 |> - dplyr::group_by(id_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : -```{r replace-code-sage-na, eval=FALSE} -station_sage_r52 <- station_sage_r52 |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout de la variable `captage_prioritaire` - -Chargement de la table des captages prioritaires de la région : -```{r load_r_captage_prioritaire_r52, eval=FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau", - user = "admin" -) - -``` - -Ajout de la variable captage_prioritaire -```{r update-captage-prioriaire, eval=FALSE} -# Alimenter la variable en vérifiant la présence du `code_si_eaux` dans `r_captage_prioritaire_r52` -station_sage_r52 <- station_sage_r52 |> - dplyr::mutate(captage_prioritaire = - code_sise_eaux %in% r_captage_prioritaire_r52$code_sise_eaux) -``` - -# Publication en base - -## Sélection des variables à conserver dans le dataframe final - -```{r order_variables, eval=FALSE} -# Modifier l'ordre des variables pour publication dans une table en base -r_station_mesure_p_r52 <- station_sage_r52 |> - dplyr::select( - id_station, - code_bss, - code_sise_eaux, - code_naiades, - libelle_station, - nature_eau, - date_creation, - source, - code_masse_eau, - code_bassin_versant, - code_commune, - code_sage, - captage_prioritaire, - the_geom - ) -``` - - -## Création dynamique du nom de la table avec l'année en cours - -```{r create_table_name, eval=FALSE} -# Définir l'année en cours -current_year <- format(Sys.Date(), "%Y") - -# Construire dynamiquement le nom de la table -table_name <- paste0("r_station_mesure_p_", current_year, "_r52") -``` - - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive_old_table, eval=FALSE} -collectr::archive_table(database = "si_eau", - table = table_name, - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish_new_table, eval=FALSE} -# Publier la table en base -datalibaba::poster_data(data = r_station_mesure_p_r52, - table = table_name, - schema = "stations", - db = "si_eau", - pk = "id_station", - overwrite = TRUE, - user = "admin") - -``` - -## Mise à jour de la géométrie de la table `r_station_mesure_p_current_year_r52` - -```{r update_geometry_r_station_mesure_p_year_r52} -# Connexion à la base de données PostgreSQL -connexion <- datalibaba::connect_to_db(db = "si_eau", user = "admin") - -# Requête SQL pour ajouter les contraintes à la colonne the_geom -# Construire la requête SQL en remplaçant dynamiquement le nom de la table -constraint_query <- sprintf( - "ALTER TABLE stations.%s - ADD CONSTRAINT enforce_geotype_the_geom - CHECK (geometrytype(the_geom) = 'MULTIPOINT'::text - OR geometrytype(the_geom) = 'POINT'::text - OR the_geom IS NULL);", - table_name -) - -# Exécution de la requête ALTER TABLE -DBI::dbExecute(connexion, constraint_query) - -# Fermeture de la connexion -DBI::dbDisconnect(connexion) - -``` - -## Ajout des commentaires de la table actualisée - -### Description de la table actualisée - -```{r publish_new_table_comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Stations de mesure millésime ", - current_year, - " (source : ARS + Hub'eau + SANDRE, ", - date_today, ")"), - table = table_name, - schema = "stations", - db = "si_eau", - user = "admin" -) - -``` - -### Description des champs de la table actualisée - -```{r publish_new_fields_comments, eval=FALSE} -# Création d'une liste avec les noms des variables et leurs descriptions -variables <- c( - "id_station", "Identifiant unique de la station de mesur", - "code_bss", "Code BSS de la station de mesure", - "code_sise_eaux", "Code SISE-EAUX de la station de mesure", - "code_naiades", "Code Naïades de la station de mesure", - "libelle_station", "Nom de la station de mesure", - "nature_eau", "Nature de l'eau de la station de mesure", - "date_creation", "Date de création de la station de mesure", - "source", "Source de la donnée", - "code_masse_eau", "Code de la masse d'eau de la station de mesure", - "code_bassin_versant", "Code du bassin versant de la station de mesure", - "code_commune", "Code INSEE de la commune de la station de mesure", - "code_sage", "Code du SAGE de la station de mesure", - "captage_prioritaire", "Captaire prioritaire (T/F)", - "the_geom", "Géométrie ponctuelle de la station de mesure" -) - -# Création du dataframe avec les variables -comments <- data.frame( - nom_variable = variables[seq(1, length(variables), by = 2)], - libelle_variable = variables[seq(2, length(variables), by = 2)], - stringsAsFactors = FALSE -) - -# Publication du dictionnaire de données -datalibaba::post_dico_attr(dico = comments, - table = table_name, - schema = "stations", - db = "si_eau", - user = "admin") - -``` - -## Mise à jour du skeleton - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations de mesure ESO et ESU", - template_dir = "update_r_station_mesure_p_r52", - template_description = "Mise à jour des stations de mesure ESO et ES", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_r_station_mesure_p_r52.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_r_station_mesure_p_r52/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_r_station_mesure_p_r52.Rmd", vignette_name = "Mise à jour des stations de mesure") -``` - diff --git a/inst/rmarkdown/templates/update_r_station_mesure_p_r52/template.yaml b/inst/rmarkdown/templates/update_r_station_mesure_p_r52/template.yaml deleted file mode 100644 index dbeb3c3a7993e88691accde98b6a8037a86a6e7c..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_r_station_mesure_p_r52/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des stations de mesure ESO et ESU -description: > - Mise à jour des stations de mesure ESO et ES -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_station_eso/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_station_eso/skeleton/skeleton.Rmd deleted file mode 100644 index 31cb9e016957b19a766a9fb8c390e2914be531ba..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_station_eso/skeleton/skeleton.Rmd +++ /dev/null @@ -1,365 +0,0 @@ ---- -title: "Mise à jour des stations ESO" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(datalibaba) -library(dplyr) -library(sf) -library(collectr) -library(usethis) -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser les **stations de mesure eau de souterraine (ESO)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `qualite_nappes_eau_souterraine.hubeau_qualite_nappes_stations` (source : Hub'eau) -- `captages.n_captage_p_r52` (source : ARS) - -# Chargement des lot de données source - -## Stations de mesure des qualités des nappes d'eau souterraine (ESO) -```{r load_hubeau_qualite_nappes_stations, eval=FALSE} -data_hubeau_eso <- datalibaba::importer_data( - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau") -``` - -## Captages ARS ESO -Chargement de la table des captages en filtrant sur la nature de l'eau du captage et le début du `code_bss` : -```{r load_captages_ars_eso, eval=FALSE} -data_ars_eso <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESO' & startsWith(code_bss, "BSS")) -``` - -Suppression des géométries vides : -```{r delete-empty-geom, eval=FALSE} -data_ars_with_geom = data_ars_eso[!sf::st_is_empty(data_ars_eso),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de Hub'eau : - -```{r select_captages_ars_not_hubeau, eval=FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_hubeau <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_hubeau_eso, by = c("code_bss" = "bss_id")) - -# Récupérer les géométries par jointure avec stations_eso_ars -data_ars_not_hubeau <- data_ars_not_hubeau |> - dplyr::left_join(data_ars_eso, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_hubeau <- dplyr::select(data_ars_not_hubeau, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_hubeau) <- gsub("\\.x$", "", - names(data_ars_not_hubeau)) -``` - -## Consolidation des stations Hub'eau - -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : -```{r consolidate_stations_hubeau, eval=FALSE} -stations_eso_hubeau <- data_hubeau_eso |> - dplyr::rename(code_station = bss_id, - libelle_station = nom_commune, - date_creation = date_debut_mesure, - code_commune = code_insee) |> - dplyr::mutate(code_sise_eaux = "", - source = "HUBEAU") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) - -# Convertir les dates de la variable date_creation -stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : -```{r consolidate_stations_ars, eval=FALSE} -stations_eso_ars <- data_ars_not_hubeau |> - dplyr::rename(code_station = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge_stations, eval=FALSE} -station_eso <- dplyr::bind_rows(stations_eso_hubeau, stations_eso_ars) -``` - -# Ajout des champs manquants au dataframe station_eso - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : -```{r load_sage, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_eso` : -```{r update_code_sage, eval=FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : -```{r get_duplicates_code_sage, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_eso, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel, à exécuter si le tibble comporte des lignes) : -```{r delete_station_duplicates_code_sage, eval=FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : -```{r replace_code_sage_na, eval=FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : -```{r load_bassin-versant, eval=FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_eso` : -```{r update_codes_bassin_versant_masse_eau, eval=FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -## Ajout du `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : -```{r load_captage_prioritaire, eval=FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire -```{r update_captage_prioriaire, eval=FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_eso <- station_eso |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_bss) -``` - -## Mise à jour du code_sise_eaux à partir des données ARS - -Remplacer les valeurs vides dans `code_station` par NA dans `station_eso` : -```{r na_code_sise_eaux, eval=FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) -``` - -```{r update_codes_sise_eaux, eval=FALSE} -# Supprimer l'objet géométrie du dataframe data_ars -data_ars_eso <- data_ars_eso |> - sf::st_drop_geometry() - -# Réaliser une jointure attributaire -station_eso <- station_eso |> - dplyr::left_join(data_ars_eso, by = c("code_station" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage -``` - -Identification des doublons générés par la jointure de récupération des `code_sise_eaux` : -```{r get_duplicates_code_sise_eaux, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sise_eaux <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire - doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - sf::st_drop_geometry() - station_eso_sans_geom <- station_eso |> sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(station_eso_sans_geom, by = "code_station") |> - dplyr::select(code_station, n, code_sise_eaux, libelle_station) - -# Visualiser les doublons -print(doublons_stations_code_sise_eaux) -``` - -Suppression des doublons : -```{r delete_duplicates_code_sise_eaux, eval=FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final -```{r select_station_eso_variables, eval=FALSE} -station_eso <- station_eso |> - dplyr::select(code_station, - code_sise_eaux, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive_old_table, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_eso", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get_comments_old_table, eval=FALSE} -station_eso_comments <- datalibaba::get_table_comments(table = "station_eso", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish_new_table, eval=FALSE} -datalibaba::poster_data(data = station_eso, - table = "station_eso", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish_new_table_comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de souterraines (source : ARS + Hub'eau, ", date_today, ")"), - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish_new_fields_comments, eval=FALSE} -datalibaba::post_dico_attr(dico = station_eso_comments, - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - -## Mise à jour du skeleton - -```{r development-create-template, eval=FALSE} -# Créer de l'arborescence et des fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations ESO", - template_dir = "update_station_eso", - template_description = "Mise à jour des stations ESO", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_station_eso.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_station_eso/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_station_eso.Rmd", vignette_name = "Mise à jour des stations ESO") -``` - diff --git a/inst/rmarkdown/templates/update_station_eso/template.yaml b/inst/rmarkdown/templates/update_station_eso/template.yaml deleted file mode 100644 index 2c44b9194883b3e58dc8a28f98486ecea6090877..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_station_eso/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des stations ESO -description: > - Mise à jour des stations ESO -create_dir: TRUE diff --git a/inst/rmarkdown/templates/update_station_esu/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/update_station_esu/skeleton/skeleton.Rmd deleted file mode 100644 index 8358c0e547c862358e18489405d346b1f28441f6..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_station_esu/skeleton/skeleton.Rmd +++ /dev/null @@ -1,402 +0,0 @@ ---- -title: "Mise à jour des stations ESU" -output: html_document -editor_options: - chunk_output_type: console ---- - -```{r development} -library(datalibaba) -library(dplyr) -library(sf) -library(collectr) -library(usethis) -library(nngeo) -``` - -```{r development-load} -# Load already included functions if relevant -pkgload::load_all(export_all = FALSE) -``` - -# Objectif - -Actualiser les **stations de mesure eau de surface (ESU)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `sandre.n_station_mesure_eaux_surface_loire_bretagne` (source : SANDRE) -- `captages.n_captage_p_r52` (source : ARS) - -# Chargement des lot de données source - -## Stations de mesure de la qualité des eaux superficielles continentales (STQ) -```{r load-hubeau_qualite_rivieres_station_pc, eval=FALSE} -data_sandre <- datalibaba::importer_data( - table = "n_station_mesure_eaux_surface_loire_bretagne", - schema = "sandre", - db = "si_eau") -``` - -## Captages ARS ESU -```{r load_captages_ars_eso, eval=FALSE} -data_ars_esu <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESU') -``` - -Suppression des géométries vides : -```{r delete-empty-geom, eval=FALSE} -data_ars_with_geom = data_ars_esu[!sf::st_is_empty(data_ars_esu),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de SANDRE - -```{r select-captages-ars-not-hubeau, eval=FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_sandre <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_sandre, by = c("code_captage" = "code_station")) - -# Récupérer les géométries par jointure avec stations_esu_ars -data_ars_not_sandre <- data_ars_not_sandre |> - dplyr::left_join(data_ars_esu, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_sandre <- dplyr::select(data_ars_not_sandre, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_sandre) <- gsub("\\.x$", "", - names(data_ars_not_sandre)) -``` - -## Consolidation des stations SANDRE - -Sélection des variables et ajout de la source : -```{r consolidate-stations_hubeau, eval=FALSE} -stations_esu_sandre <- data_sandre |> - dplyr::mutate(source = "SANDRE") |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_commune, - the_geom) - -# Convertir les dates de la variable date_creation -stations_esu_sandre$date_creation <- as.Date(stations_esu_sandre$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : -```{r consolidate-stations_ars, eval=FALSE} -stations_esu_ars <- data_ars_not_sandre |> - dplyr::rename(code_station = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge-stations, eval=FALSE} -station_esu <- dplyr::bind_rows(stations_esu_sandre, stations_esu_ars) -``` - -# Ajout des champs manquants au dataframe station_esu - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : -```{r load-sage, eval=FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_esu` : -```{r update-code-sage, eval=FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : -```{r get-station-duplicates-code_sage, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel) : -```{r delete-station-duplicates-code-sage, eval=FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : -```{r replace-code-sage-na, eval=FALSE} -station_esu <- station_esu |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : -```{r load-bassin-versant, eval=FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_esu` : -```{r update-codes-bassin-versant-masse-eau, eval=FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -Fusion des variables pour conserver un maximum de valeurs : -```{r merge-variables, eval=FALSE} -# Fusionner les variables code_masse_eau.x et code_masse_eau.y, code_eu_masse_eau.x et code_eu_masse_eau.y -station_esu <- station_esu |> - dplyr::mutate(code_masse_eau = dplyr::coalesce(code_masse_eau.x, code_masse_eau.y)) |> - dplyr::select(-code_masse_eau.x, -code_masse_eau.y) # Supprimer les colonnes inutiles -``` - -Identification des doublons générés par la superposition de périmètres dans la table des bassins versants : -```{r get_duplicates_code_bassin_versant, eval=FALSE} -# Compter les occurrences de chaque code_station -doublons_code_bassin_versant <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_bassin_versant_specifique_000, by = c("code_bassin_versant" = "code_bassin_versant_specifique")) |> - dplyr::select(code_station, n, libelle_station, code_bassin_versant, nom_bassin_versant_specifique, the_geom.x) - -# Visualiser les doublons -print(doublons_code_bassin_versant) -``` - -Suppression des doublons (optionnel) : -```{r delete_duplicates_code_bassin_versant, eval=FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -## Ajout du champs `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : -```{r load-captage-prioritaire, eval=FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire -```{r update-captage-prioriaire, eval=FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_esu <- station_esu |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_sise_eaux) -``` - -# Intersection des stations ESU avec les SAGE de la région et les limites régionales - -Chargement de la table des limites de la région : -```{r load-region, eval=FALSE} -n_region_exp_r52 <- datalibaba::importer_data( - table = "n_region_exp_r52", - schema = "adminexpress", - db = "referentiels" -) -``` - -Vérification des objets sf : -```{r st_as_sf, eval=FALSE} -# Vérifier que les deux dataframes sont en format 'sf' -station_esu <- sf::st_as_sf(station_esu) -n_sage_r52 <- sf::st_as_sf(n_sage_r52) -n_region_exp_r52 <- sf::st_as_sf(n_region_exp_r52) - -``` - -Création d'un polygone fusionnant SAGE et région : -```{r limit_sage, eval=FALSE} -# Identification des noms de colonnes communs aux deux objets -colonnes_communes <- intersect(names(n_region_exp_r52), names(n_sage_r52)) - -# Sélection des colonnes communes dans chaque objet -n_region_exp_r52 <- n_region_exp_r52[, colonnes_communes] -n_sage_r52 <- n_sage_r52[, colonnes_communes] - -# Combinaison des deux objets dans un seul objet sf -# (création d'une seule collection de géométries pour pouvoir les fusionner) -objets_combines <- rbind(n_region_exp_r52, n_sage_r52) - -# Agrégation de tous les polygones en un seul avec st_union() -# (si les polygones se chevauchent ou sont adjacents, ils seront fusionnés) -n_sage_r52_union <- sf::st_union(objets_combines) - -# Correction de la géométrie, pour s'assurer qu'elle est valide -n_sage_r52_valid <- sf::st_make_valid(n_sage_r52_union) - -# Suppresion des trous internes en récupérant uniquement la limite extérieure -n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) - -``` - -Sélection des stations ESU présentes dans les SAGE et la région : -```{r st_intersects_stations_sage, eval=FALSE} -# Filtrer les stations ESU présentes dans les SAGE de la région -station_esu <- sf::st_filter(station_esu, n_sage_r52_limit) - -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final -```{r select-station-esu-variables, eval=FALSE} -station_esu <- station_esu |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : -```{r archive-old-table, eval=FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_esu", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get-comments-old-table, eval=FALSE} -station_esu_comments <- datalibaba::get_table_comments(table = "station_esu", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : -```{r publish-new-table, eval=FALSE} -datalibaba::poster_data(data = station_esu, - table = "station_esu", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish-new-table-comment, eval=FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de surface (ESU) (source : ARS + SANDRE, ", date_today, ")"), - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish-new-fields-comments, eval=FALSE} -datalibaba::post_dico_attr(dico = station_esu_comments, - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - -```{r development-create-template, eval=FALSE} -# Créer l'arborescence et les fichiers du template -usethis::use_rmarkdown_template( - template_name = "Mise à jour des stations ESU", - template_dir = "update_station_esu", - template_description = "Mise à jour des stations ESU", - template_create_dir = TRUE -) - -# Définir les chemins source et destination -source_file <- "dev/flat_update_station_esu.Rmd" -destination_dir <- "inst/rmarkdown/templates/update_station_esu/skeleton" -destination_file <- file.path(destination_dir, "skeleton.Rmd") - -# Copier et renommer le fichier -file.copy(from = source_file, to = destination_file, overwrite = TRUE) -message("File copied and renamed successfully.") -``` - -```{r development-inflate, eval=FALSE} -options(rmarkdown.html_vignette.check_title = FALSE) -# Run but keep eval=FALSE to avoid infinite loop -# Execute in the console directly -fusen::inflate(flat_file = "dev/flat_update_station_esu.Rmd", vignette_name = "Mise à jour des stations ESU") -``` - diff --git a/inst/rmarkdown/templates/update_station_esu/template.yaml b/inst/rmarkdown/templates/update_station_esu/template.yaml deleted file mode 100644 index 9bcfc07f2085ac98117150c8f0ca640a3419aef9..0000000000000000000000000000000000000000 --- a/inst/rmarkdown/templates/update_station_esu/template.yaml +++ /dev/null @@ -1,4 +0,0 @@ -name: Mise à jour des stations ESU -description: > - Mise à jour des stations ESU -create_dir: TRUE diff --git a/vignettes/mise-a-jour-des-captages-ars.Rmd b/vignettes/mise-a-jour-des-captages-ars.Rmd index 3f1e868719ae53e529cf3542e53c45667c5875a3..887c61e2a77a3a4c03f49e69f2f3d5c3b2e34611 100644 --- a/vignettes/mise-a-jour-des-captages-ars.Rmd +++ b/vignettes/mise-a-jour-des-captages-ars.Rmd @@ -23,6 +23,18 @@ library(data.captages) +```{r config} +#| eval: no + +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") + +# Accéder à la valeur pour file_path_data_ars +file_path_data_ars <- config$file_path_data_ars +``` + + + # Objectif Actualiser **la table des captages de la région** (`captages.n_captage_p_r52`) @@ -33,6 +45,9 @@ Actualiser **la table des captages de la région** (`captages.n_captage_p_r52`) ## Captages ARS (SISE-EAUX) ### Chargement des captages du dernier livrable en date + +Il faut au préalable **modifier si besoin le chemin vers le dernier livrable de l'ARS au format Excel qui est stocké dans le fichier config.yml** situé à la racine du package. + L'export transmis par l'ARS est importé ainsi que la date du fichier (qui sera utilisée ultérieurement comme métadonnée) : ```{r load_data} #| eval: no @@ -40,14 +55,11 @@ L'export transmis par l'ARS est importé ainsi que la date du fichier (qui sera # Make the dataset file available to the current Rmd during development pkgload::load_all(path = here::here(), export_all = FALSE) -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/CAP_SISE_13_02_2024.xlsx" - # Stocker la date de dernier enregistrement du fichier -last_modified_date <- format(file.info(file_path)$ctime,"%d/%m/%Y") +last_modified_date <- format(file.info(file_path_data_ars)$ctime,"%d/%m/%Y") # Lire le fichier Excel dans un dataframe -data <- readxl::read_excel(file_path) +data <- readxl::read_excel(file_path_data_ars) # Vérifier le type de données dans la colonne "INS - Début d'usage - Date" str(data) @@ -59,7 +71,6 @@ data <- data |> # Convertir les valeurs numériques en dates data <- data |> dplyr::mutate(`INS - Début d'usage - Date` = as.Date(`INS - Début d'usage - Date`, origin = "1899-12-30")) - ``` @@ -72,118 +83,25 @@ table en base : captage <- data |> dplyr::rename(departement_captage = "INS - Dépt gest - Code", - code_unite_gestion = "UGE - Code national", - nom_unite_gestion = "UGE - Nom", - code_captage = "INS - Code national", - nom_captage = "INS - Nom", - type_installation = "INS - Type - Code", - nature_eau_captage = "INS - Nature de l'eau - Code", - usage_captage = "INS - Usage direct - Code", - etat_installation = "INS - Etat - Code", - date_etat_installation = "INS - Début d'usage - Date", - code_responsable_suivi = "INS - Resp. suivi - Code", - motif_abandon = "INS - Motif d'abandon - Libellé", - code_commune_captage = "COM - Code INSEE (5 car)", - nom_commune_captage = "COM - Nom", - code_bss = "CAP - BSS - Code", - designation_bss = "CAP - BSS - Désignation", - coordonnee_x = "PSV - Coordonnée X", - coordonnee_y = "PSV - Coordonnée Y", - coordonnee_z = "PSV - Coordonnée Z", - debit_moyen_m3j = "INS - Débit moyen/jour - m3/j") - -``` - - -## Captages ARS (SISE-EAUX) gérés par un autre département -:warning: On récupère de façon temporaire ces captages (principalement gérés -par le 35) dans un livrable plus ancien car ils ne sont pas disponibles dans -la livraison la plus récente. il faut donc vérifier le contenu du livrable -avant d'exécuter le chunk suivant, après chaque livraison. - -### Chargement des captages manquants -```{r load_missing_data} -#| eval: no - -# Make the dataset file available to the current Rmd during development -pkgload::load_all(path = here::here(), export_all = FALSE) - -# Spécifier le chemin vers le fichier Excel -file_path <- "T:/datalab/SRNP_DEMA_SI_EAU/CAPTAGES_ZONAGES_ASSOCIES/DONNEES_CLIENT/CAPTAGES/@archives/CAP_SISE_11_11_2020.xlsx" - -# Lire le fichier Excel dans un dataframe et filtrer pour ne conserver que les enregistrements du 35 -missing_data <- readxl::read_excel(file_path, skip = 5) |> - dplyr::filter(`Dpt Gest.` == "035") - -``` - - -### Renommage et sélection des variables -```{r load_missing_data-1} -#| eval: no - -# Adapter le format du dataframe pour le fusionner avec les données plus récentes -captage_035 <- missing_data |> - dplyr::rename(departement_captage = "Dpt Gest.", - code_unite_gestion = "UGE - Code", - nom_unite_gestion = "UGE - Nom", - code_captage = "Code CAP", - nom_captage = "Nom Captage", - type_installation = "Type ins", - nature_eau_captage = "NatEau", - usage_captage = "Usage", - etat_installation = "Etat", - date_etat_installation = "DébUsage", - motif_abandon = "Motif abandon", - code_commune_captage = "Com Code", - nom_commune_captage = "Com Nom", - code_bss = "BSS code", - designation_bss = "Dés. BSS", - coordonnee_x = "X - Lbt2e", - coordonnee_y = "Y - Lbt2e", - coordonnee_z = "Z", - debit_moyen_m3j = "moy m3/j") |> - dplyr::mutate(date_etat_installation = as.Date(date_etat_installation), - code_responsable_suivi = NA, - code_commune_captage = as.character(code_commune_captage) - ) |> - dplyr::select( - departement_captage, - code_unite_gestion, - nom_unite_gestion, - code_captage, - nom_captage, - type_installation, - nature_eau_captage, - usage_captage, - etat_installation, - date_etat_installation, - code_responsable_suivi, - motif_abandon, - code_commune_captage, - nom_commune_captage, - code_bss, - designation_bss, - coordonnee_x, - coordonnee_y, - coordonnee_z, - debit_moyen_m3j - ) - - -``` - - -## Fusion des deux dataframes - -On rassemble les données des dataframes `captage` `captage_035` pour disposer -du référentiel le plus complet possible : -```{r merge_captages} -#| eval: no - -# Fusionner les deux dataframes -captage_full <- dplyr::bind_rows(captage, captage_035) |> - dplyr::arrange(code_captage) + code_unite_gestion = "UGE - Code national", + nom_unite_gestion = "UGE - Nom", + code_captage = "INS - Code national", + nom_captage = "INS - Nom", + type_installation = "INS - Type - Code", + nature_eau_captage = "INS - Nature de l'eau - Code", + usage_captage = "INS - Usage direct - Code", + etat_installation = "INS - Etat - Code", + date_etat_installation = "INS - Début d'usage - Date", + code_responsable_suivi = "INS - Resp. suivi - Code", + motif_abandon = "INS - Motif d'abandon - Libellé", + code_commune_captage = "COM - Code INSEE (5 car)", + nom_commune_captage = "COM - Nom", + code_bss = "CAP - BSS - Code", + designation_bss = "CAP - BSS - Désignation", + coordonnee_x = "PSV - Coordonnée X", + coordonnee_y = "PSV - Coordonnée Y", + coordonnee_z = "PSV - Coordonnée Z", + debit_moyen_m3j = "INS - Débit moyen/jour - m3/j") ``` @@ -203,7 +121,6 @@ table_de_passage_bss_000 <- datalibaba::importer_data( db = "si_eau", user = "admin" ) - ``` @@ -214,7 +131,7 @@ jointure est possible : #| eval: no # Mettre à jour la variable `code_bss` du dataframe `captage` -captage_bss <- captage_full |> +captage_bss <- captage |> dplyr::left_join(table_de_passage_bss_000, by = c("code_bss" = "indice")) |> dplyr::mutate(code_bss = ifelse(!is.na(nouvel_identifiant), nouvel_identifiant, code_bss)) |> dplyr::select(departement_captage:debit_moyen_m3j) @@ -254,11 +171,11 @@ cat("Le fichier captage_eso_sans_code_bss.csv a été enregistré avec succès.\ # Comparer la structure du dataframe avec celle de la table en base collectr::check_structure_table(dataframe = captage, + host = Sys.getenv("server"), database = "si_eau", table = "n_captage_p_r52", schema = "captages", role = "admin") - ``` @@ -273,7 +190,6 @@ captage_sans_geom <- captage_bss |> dplyr::mutate(coordonnee_x = ifelse(coordonnee_x %in% c(1, 3), NA, coordonnee_x), coordonnee_y = ifelse(coordonnee_y %in% c(1, 3), NA, coordonnee_y)) |> dplyr::filter(is.na(coordonnee_x) | is.na(coordonnee_y)) - ``` @@ -287,7 +203,6 @@ utils::write.csv(captage_sans_geom, # Afficher un message de confirmation cat("Le fichier captage_sans_geom.csv a été enregistré avec succès.\n") - ``` @@ -309,7 +224,6 @@ captage_geom <- sf::st_as_sf(captage_with_xy, crs = 2154, remove = FALSE) |> dplyr::rename(the_geom = geometry) - ``` @@ -320,7 +234,6 @@ Reconstitution du lot de données complet (avec et sans géométrie valide) : #| eval: no n_captage_p_r52 <- dplyr::bind_rows(captage_geom, captage_sans_geom) - ``` @@ -332,17 +245,15 @@ La version précédente de l'export est stockée dans un schéma d'archive : ```{r archive_old_table} #| eval: no -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "n_captage_p_r52", schema = "captages", new_schema = "zz_archives", role = "admin") - ``` -## Ajout de la contrainté géomatique concernant le type de géométries - ## Récupération des commentaires de la version précédente de la table ```{r get_comments_old_table} #| eval: no @@ -354,7 +265,6 @@ n_captage_p_r52_comments <- datalibaba::get_table_comments(table = "n_captage_p_ dplyr::filter(!is.na(nom_col)) |> dplyr::select(nom_col, commentaire) |> dplyr::arrange(nom_col) - ``` @@ -371,10 +281,11 @@ datalibaba::poster_data(data = n_captage_p_r52, pk = "code_captage", overwrite = TRUE, user = "admin") - ``` +## Ajout de la contrainte géomatique concernant le type de géométries + ## Publication de la description de la table actualisée ```{r publish_new_table_comment} #| eval: no @@ -385,7 +296,6 @@ datalibaba::commenter_table( schema = "captages", db = "si_eau", user = "admin") - ``` @@ -398,8 +308,6 @@ datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, schema = "captages", db = "si_eau", user = "admin") - ``` - diff --git a/vignettes/mise-a-jour-des-captages-en-eau-potable.Rmd b/vignettes/mise-a-jour-des-captages-en-eau-potable.Rmd index ac69084334ad93d4a27861bdd41a710648ec2c52..be77b249920e79e28e029b3001e15d7f4da82c98 100644 --- a/vignettes/mise-a-jour-des-captages-en-eau-potable.Rmd +++ b/vignettes/mise-a-jour-des-captages-en-eau-potable.Rmd @@ -2,7 +2,7 @@ title: "Mise à jour des captages en eau potable" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{mise-a-jour-des-captages-en-eau-potable} + %\VignetteIndexEntry{Mise à jour des captages en eau potable} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -14,27 +14,31 @@ knitr::opts_chunk$set( ) ``` -```{r setup} +```{r} library(data.captages) ``` <!-- WARNING - This vignette is generated by {fusen} from dev/flat_update_captage_ep.Rmd: do not edit by hand --> + + + # Objectif Actualiser **la table des captages en eau potable de la région** (`captages.n_captage_eau_potable_p_r52`) à partir de la table des captages de l'ARS (`captages.n_captage_p_r52`). - # Création du dataframe des captages en eau potable ## Chargement de la table des captages +```{r load-captage} +#| eval: no -```{r load-captage, eval = FALSE} n_captage_p_r52 <- datalibaba::importer_data(db = "si_eau", schema = "captages", table = "n_captage_p_r52") ``` + ## Filtre sur les captages en eau potable Les enregistrements correspondant aux valeurs suivantes pour les usages sont sélectionnés : @@ -45,50 +49,61 @@ Les enregistrements correspondant aux valeurs suivantes pour les usages sont sé - `PRV` : ADDUCTION COLLECTIVE PRIVEE Source : table `captages.n_captage_usage_direct` +```{r filter-captage-ep} +#| eval: no - -```{r filter-captage-ep, eval = FALSE} n_captage_eau_potable_p_r52 <- n_captage_p_r52 |> dplyr::filter(usage_captage %in% c('AEP', 'PRV', 'ALI', 'CND')) ``` + # Publication de la table en base ## Vérification de la correspondance des variables avec les champs stockés en base - -```{r check-attributes, eval = FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::check_structure_table(connexion, - df = n_captage_eau_potable_p_r52, - table_name = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable") +```{r check-attributes} +#| eval: no + +collectr::check_structure_table(dataframe = n_captage_eau_potable_p_r52, + host = Sys.getenv("server"), + database = "si_eau", + table = "n_captage_eau_potable_p_r52", + schema = "alimentation_eau_potable", + role = "admin") ``` + ## Archivage de la version précédente de la table +```{r archive-old-table} +#| eval: no -```{r archive-old-table, eval = FALSE} -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", new_schema = "zz_archives", role = "admin") ``` -## Récupération des commentaires de la version précédente de la table -```{r get-comments-old-table, eval = FALSE} -n_captage_eau_potable_p_r52_comments <- datalibaba::get_table_comments( - table = "n_captage_eau_potable_p_r52", - schema = "alimentation_eau_potable", - db = "si_eau") |> +## Récupération des commentaires de la version précédente de la table +```{r get-comments-old-table} +#| eval: no + +n_captage_eau_potable_p_r52_comments <- + datalibaba::get_table_comments( + table = "n_captage_eau_potable_p_r52", + schema = "alimentation_eau_potable", + db = "si_eau") |> dplyr::filter(!is.na(nom_col)) |> dplyr::select(nom_col, commentaire) |> dplyr::arrange(nom_col) ``` + ## Publication de la table actualisée +```{r publish-new-table} +#| eval: no -```{r publish-new-table, eval = FALSE} datalibaba::poster_data(data = n_captage_eau_potable_p_r52, table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", @@ -98,26 +113,32 @@ datalibaba::poster_data(data = n_captage_eau_potable_p_r52, user = "admin") ``` + +## Ajout de la contrainte géomatique concernant le type de géométries + ## Publication de la description de la table actualisée +```{r publish-new-table-comment} +#| eval: no -```{r publish-new-table-comment, eval = FALSE} datalibaba::commenter_table( comment = glue::glue("Points de prélèvement en eau potable de la région Pays de la Loire (source : ARS, ", last_modified_date, ")"), table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", db = "si_eau", - user= "admin" -) + user= "admin") ``` + ## Publication des commentaires des champs de la table actualisée +```{r publish-new-fields-comments} +#| eval: no -```{r publish-new-fields-comments, eval = FALSE} datalibaba::post_dico_attr(dico = n_captage_p_r52_comments, table = "n_captage_eau_potable_p_r52", schema = "alimentation_eau_potable", db = "si_eau", - user = "admin" - ) + user = "admin") ``` + + diff --git a/vignettes/mise-a-jour-des-stations-de-mesure.Rmd b/vignettes/mise-a-jour-des-stations-de-mesure.Rmd index a292cb1a2042a722576dc49ecb332154dcef01fd..de3ecd6201dec99df25b1db54133b5d82e090e4f 100644 --- a/vignettes/mise-a-jour-des-stations-de-mesure.Rmd +++ b/vignettes/mise-a-jour-des-stations-de-mesure.Rmd @@ -23,6 +23,17 @@ library(data.captages) +```{r config} +#| eval: no + +# Lire le fichier de configuration +config <- yaml::read_yaml("config.yml") + +# Accéder à la valeur pour year +year <- config$year +``` + + # Objectif Actualiser les **stations de mesure eau souterraine (ESO) et eau de surface (ESU)** @@ -80,7 +91,7 @@ data_esu_sandre <- datalibaba::importer_data( ## Stations de mesure des qualités des nappes d'eau souterraine (ESO) -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : +Renommage et ajout de variables : ```{r consolidate_stations_hubeau_eso} #| eval: no @@ -89,34 +100,17 @@ stations_eso_hubeau <- data_eso_hubeau |> date_creation = date_debut_mesure, code_commune = code_insee) |> dplyr::mutate(code_sise_eaux = NA, + code_naiades = NA, source = "HUBEAU", nature_eau = "ESO", - code_masse_eau = NA) |> - dplyr::select(code_bss = bss_id, - code_sise_eaux, - libelle_station, - nature_eau, - date_creation, - source, - code_masse_eau = codes_masse_eau_edl, - code_commune, - the_geom) + code_masse_eau = NA) # Convertir les dates de la variable date_creation stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) ``` -Remplacer les valeurs vides dans `code_sise_eaux` par NA dans `stations_eso_hubeau` : -```{r na_code_sise_eaux} -#| eval: no - -stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) -``` - - -Réaliser la jointure sur la variable `code_bss` : +Réaliser la jointure sur la variable `bss_id` : ```{r update_code_sise_eaux} #| eval: no @@ -125,9 +119,8 @@ data_ars_no_geom <- data_ars |> sf::st_drop_geometry() # Réaliser une jointure attributaire stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::left_join(data_ars_no_geom, by = c("code_bss" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage + dplyr::left_join(data_ars_no_geom, by = c("bss_id" = "code_bss")) |> + dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) ``` @@ -137,7 +130,7 @@ Identification des doublons générés par la jointure de récupération des `co # Compter les occurrences de chaque code_station doublons_stations_code_sise_eaux <- stations_eso_hubeau |> - dplyr::group_by(code_bss) |> + dplyr::group_by(bss_id) |> dplyr::tally(name = "n") |> dplyr::filter(n > 1) @@ -148,8 +141,8 @@ doublons_stations_code_sise_eaux <- stations_eso_hubeau |> # Joindre les informations additionnelles doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(stations_eso_hubeau_no_geom, by = "code_bss") |> - dplyr::select(code_bss, n, code_sise_eaux, libelle_station) + dplyr::left_join(stations_eso_hubeau_no_geom, by = "bss_id") |> + dplyr::select(bss_id, n, code_sise_eaux, libelle_station) # Visualiser les doublons print(doublons_stations_code_sise_eaux) @@ -161,22 +154,42 @@ Suppression des doublons : #| eval: no stations_eso_hubeau <- stations_eso_hubeau |> - dplyr::group_by(code_bss, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() + dplyr::group_by(bss_id, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() +``` + + +Sélection finale des variables : +```{r consolidate_stations_esu_sandre} +#| eval: no + +stations_eso_hubeau <- stations_eso_hubeau |> + dplyr::select(code_bss = bss_id, + code_sise_eaux, + code_naiades, + libelle_station, + date_creation, + nature_eau, + source, + code_masse_eau = codes_masse_eau_edl, + code_commune, + the_geom) ``` ## Stations de mesure de la qualité des eaux superficielles continentales (STQ) -Sélection des variables et ajout de la source : -```{r consolidate_stations_esu_sandre} +Sélection et ajout de variables : +```{r consolidate_stations_esu_sandre-1} #| eval: no stations_esu_sandre <- data_esu_sandre |> dplyr::mutate(code_bss = NA, + code_sise_eaux = NA, source = "SANDRE", nature_eau = "ESU") |> dplyr::select(code_bss, - code_sise_eaux = code_station, + code_sise_eaux, + code_naiades = code_station, libelle_station, date_creation, nature_eau, @@ -210,7 +223,7 @@ stations_ars_not_hubeau_sandre <- data_ars_with_geom |> sf::st_drop_geometry() |> # Exclure les stations présentes dans stations_eso_hubeau et stations_esu_sandre dplyr::anti_join(stations_eso_hubeau, by = c("code_bss" = "code_bss")) |> - dplyr::anti_join(stations_esu_sandre, by = c("code_captage" = "code_sise_eaux")) |> + dplyr::anti_join(stations_esu_sandre, by = c("code_captage" = "code_naiades")) |> # Récupérer les géométries par jointure avec data_ars dplyr::left_join(data_ars, by = "code_captage") |> # Désélectionner toutes les variables finissant par .y @@ -223,21 +236,39 @@ names(stations_ars_not_hubeau_sandre) <- gsub("\\.x$", "", names(stations_ars_no ## Consolidation des stations ARS -Ajout de la source et sélection des variables : +Ajout de la source : ```{r consolidate_stations_ars} #| eval: no -# Ajouter la variable `source` et sélectionner les variables nécessaires +# Ajouter la variable `source` stations_ars <- stations_ars_not_hubeau_sandre |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_bss = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - nature_eau = nature_eau_captage, - date_creation = date_etat_installation, - source, - code_commune = code_commune_captage, - the_geom) + dplyr::mutate(source = "ARS") +``` + + +## Ajout de la variable `code_naiades` pour les stations ARS + +Cet ajout ne concerne que les stations ESU : +```{r add_code_naiades} +#| eval: no + +# Créer et alimenter la variable `code_naiades` à partir de `code_sise_eaux` +stations_ars <- stations_ars |> + dplyr::mutate( + code_naiades = dplyr::case_when( + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^044") ~ stringr::str_replace(code_captage, "^044", "BS"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^049") ~ stringr::str_replace(code_captage, "^049", "BX"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^053") ~ stringr::str_replace(code_captage, "^053", "CB"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^072") ~ stringr::str_replace(code_captage, "^072", "CU"), + nature_eau_captage == "ESU" & + stringr::str_detect(code_captage, "^085") ~ stringr::str_replace(code_captage, "^085", "DH"), + TRUE ~ NA_character_ # Met NA si aucun pattern ne correspond + ) + ) ``` @@ -271,6 +302,25 @@ stations_ars <- stations_ars |> ``` +Sélection finale des variables : +```{r select_variables_stations_ars} +#| eval: no + +# Sélectionner les variables nécessaires +stations_ars <- stations_ars |> + dplyr::select(code_bss, + code_sise_eaux = code_captage, + code_naiades, + libelle_station = nom_captage, + nature_eau = nature_eau_captage, + date_creation = date_etat_installation, + source, + code_masse_eau, + code_commune = code_commune_captage, + the_geom) +``` + + ## Fusion des trois dataframes ```{r merge_stations} #| eval: no @@ -345,11 +395,11 @@ n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) ``` -Sélection des stations ESU présentes dans les SAGE et la région : +Sélection des stations présentes dans les SAGE et la région : ```{r st_intersects_stations_sage} #| eval: no -# Filtrer les stations ESU présentes dans les SAGE de la région +# Filtrer les stations présentes dans les SAGE de la région station_sage_r52 <- sf::st_filter(station_full, n_sage_r52_limit) ``` @@ -369,28 +419,6 @@ station_sage_r52 <- station_sage_r52 |> ``` - -## Ajout de la variable `code_naiades` -Cet ajout ne concerne que les stations ESU : -```{r add_code_naiades} -#| eval: no - -# Créer et alimenter la variable `code_naiades` à partir de `code_sise_eaux` -station_sage_r52 <- station_sage_r52 |> - dplyr::mutate( - code_naiades = dplyr::case_when( - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^044") ~ stringr::str_replace(code_sise_eaux, "^044", "BS"), - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^049") ~ stringr::str_replace(code_sise_eaux, "^049", "BX"), - nature_eau == "ESU" & source == "ARS" & - stringr::str_detect(code_sise_eaux, "^053") ~ stringr::str_replace(code_sise_eaux, "^053", "CB"), - TRUE ~ NA_character_ # Met NA si aucun pattern ne correspond - ) - ) -``` - - ## Ajout de la variable `code_bassin_versant` Jointure spatiale entre `n_bassin_versant_specifique_000` et `station_sage_r52` : @@ -400,8 +428,14 @@ Jointure spatiale entre `n_bassin_versant_specifique_000` et `station_sage_r52` # Réaliser une jointure spatiale pour récupérer la variable `code_bassin_versant` station_sage_r52 <- station_sage_r52 |> sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique), - join = sf::st_within, left = TRUE) + dplyr::select(code_bassin_versant = code_bassin_versant_specifique, + code_eu_masse_eau), + join = sf::st_within, left = TRUE) |> + dplyr::mutate(code_bassin_versant = dplyr::if_else( + stringr::str_starts(code_bassin_versant, "H0000000"), + code_eu_masse_eau, + code_bassin_versant + )) ``` @@ -565,17 +599,14 @@ r_station_mesure_p_r52 <- station_sage_r52 |> ```{r create_table_name} #| eval: no -# Définir l'année en cours -current_year <- format(Sys.Date(), "%Y") - # Construire dynamiquement le nom de la table -table_name <- paste0("r_station_mesure_p_", current_year, "_r52") +table_name <- paste0("r_station_mesure_p_", year, "_r52") ``` ## Archivage de la version précédente de la table -La version précédente de l'export est stockée dans un schéma d'archive : +La version précédente de l'export est stock\u00e9e dans un sch\u00e9ma d'archive : ```{r archive_old_table} #| eval: no @@ -605,7 +636,7 @@ datalibaba::poster_data(data = r_station_mesure_p_r52, ``` -## Mise à jour de la géométrie de la table `r_station_mesure_p_current_year_r52` +## Mise à jour de la géométrie de la table `r_station_mesure_p_year_r52` ```{r update_geometry_r_station_mesure_p_current_year_r52} #| eval: no @@ -639,9 +670,9 @@ DBI::dbDisconnect(connexion) date_today <- format(Sys.time(), format = "%d/%m/%Y") datalibaba::commenter_table( - comment = glue::glue("Stations de mesure millésime ", - current_year, - " (source : ARS + Hub'eau + SANDRE, ", + comment = glue::glue("Stations de mesure mill\u00e9sime ", + year, + " (source : ARS + Hub\'eau + SANDRE, ", date_today, ")"), table = table_name, schema = "stations", @@ -657,20 +688,20 @@ datalibaba::commenter_table( # Création d'une liste avec les noms des variables et leurs descriptions variables <- c( - "id_station", "Identifiant unique de la station de mesur", + "id_station", "Identifiant unique de la station de mesure", "code_bss", "Code BSS de la station de mesure", "code_sise_eaux", "Code SISE-EAUX de la station de mesure", - "code_naiades", "Code Naïades de la station de mesure", + "code_naiades", "Code Na\u00efades de la station de mesure", "libelle_station", "Nom de la station de mesure", - "nature_eau", "Nature de l'eau de la station de mesure", - "date_creation", "Date de création de la station de mesure", - "source", "Source de la donnée", - "code_masse_eau", "Code de la masse d'eau de la station de mesure", + "nature_eau", "Nature de l\'eau de la station de mesure", + "date_creation", "Date de cr\u00e9ation de la station de mesure", + "source", "Source de la donn\u00e9e", + "code_masse_eau", "Code de la masse d\'eau de la station de mesure", "code_bassin_versant", "Code du bassin versant de la station de mesure", "code_commune", "Code INSEE de la commune de la station de mesure", "code_sage", "Code du SAGE de la station de mesure", "captage_prioritaire", "Captaire prioritaire (T/F)", - "the_geom", "Géométrie ponctuelle de la station de mesure" + "the_geom", "G\u00e9om\u00e9trie ponctuelle de la station de mesure" ) # Création du dataframe avec les variables @@ -689,6 +720,4 @@ datalibaba::post_dico_attr(dico = comments, ``` -## Mise à jour du skeleton - diff --git a/vignettes/mise-a-jour-des-stations-eso.Rmd b/vignettes/mise-a-jour-des-stations-eso.Rmd deleted file mode 100644 index 00a02ddbe14e8d13e0f5196399772a4688c6a1dc..0000000000000000000000000000000000000000 --- a/vignettes/mise-a-jour-des-stations-eso.Rmd +++ /dev/null @@ -1,364 +0,0 @@ ---- -title: "Mise à jour des stations ESO" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{mise-a-jour-des-stations-eso} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -```{r setup} -library(data.captages) -``` - -<!-- WARNING - This vignette is generated by {fusen} from dev/flat_update_station_eso.Rmd: do not edit by hand --> - -# Objectif - -Actualiser les **stations de mesure eau de souterraine (ESO)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `qualite_nappes_eau_souterraine.hubeau_qualite_nappes_stations` (source : Hub'eau) -- `captages.n_captage_p_r52` (source : ARS) - - -# Chargement des lot de données source - -## Stations de mesure des qualités des nappes d'eau souterraine (ESO) - -```{r load_hubeau_qualite_nappes_stations, eval = FALSE} -data_hubeau_eso <- datalibaba::importer_data( - table = "hubeau_qualite_nappes_stations", - schema = "qualite_nappes_eau_souterraine", - db = "si_eau") -``` - -## Captages ARS ESO - -Chargement de la table des captages en filtrant sur la nature de l'eau du captage et le début du `code_bss` : - -```{r load_captages_ars_eso, eval = FALSE} -data_ars_eso <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESO' & startsWith(code_bss, "BSS")) -``` - -Suppression des géométries vides : - -```{r delete-empty-geom, eval = FALSE} -data_ars_with_geom = data_ars_eso[!sf::st_is_empty(data_ars_eso),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de Hub'eau : - -```{r select_captages_ars_not_hubeau, eval = FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_hubeau <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_hubeau_eso, by = c("code_bss" = "bss_id")) - -# Récupérer les géométries par jointure avec stations_eso_ars -data_ars_not_hubeau <- data_ars_not_hubeau |> - dplyr::left_join(data_ars_eso, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_hubeau <- dplyr::select(data_ars_not_hubeau, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_hubeau) <- gsub("\\.x$", "", - names(data_ars_not_hubeau)) -``` - -## Consolidation des stations Hub'eau - -Renommage des variables, ajout du code SISE-Eaux et de la source, sélection des variables : - -```{r consolidate_stations_hubeau, eval = FALSE} -stations_eso_hubeau <- data_hubeau_eso |> - dplyr::rename(code_station = bss_id, - libelle_station = nom_commune, - date_creation = date_debut_mesure, - code_commune = code_insee) |> - dplyr::mutate(code_sise_eaux = "", - source = "HUBEAU") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) - -# Convertir les dates de la variable date_creation -stations_eso_hubeau$date_creation <- as.Date(stations_eso_hubeau$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : - -```{r consolidate_stations_ars, eval = FALSE} -stations_eso_ars <- data_ars_not_hubeau |> - dplyr::rename(code_station = code_bss, - code_sise_eaux = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,code_sise_eaux,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge_stations, eval = FALSE} -station_eso <- dplyr::bind_rows(stations_eso_hubeau, stations_eso_ars) -``` - -# Ajout des champs manquants au dataframe station_eso - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : - -```{r load_sage, eval = FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_eso` : - -```{r update_code_sage, eval = FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : - -```{r get_duplicates_code_sage, eval = FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_eso, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel, à exécuter si le tibble comporte des lignes) : - -```{r delete_station_duplicates_code_sage, eval = FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : - -```{r replace_code_sage_na, eval = FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : - -```{r load_bassin-versant, eval = FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_eso` : - -```{r update_codes_bassin_versant_masse_eau, eval = FALSE} -# Réaliser une jointure spatiale -station_eso <- station_eso |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -## Ajout du `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : - -```{r load_captage_prioritaire, eval = FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire - -```{r update_captage_prioriaire, eval = FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_eso <- station_eso |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_bss) -``` - -## Mise à jour du code_sise_eaux à partir des données ARS - -Remplacer les valeurs vides dans `code_station` par NA dans `station_eso` : - -```{r na_code_sise_eaux, eval = FALSE} -station_eso <- station_eso |> - dplyr::mutate(code_sise_eaux = dplyr::if_else(code_sise_eaux == "", NA_character_, code_sise_eaux)) -``` - -```{r update_codes_sise_eaux, eval = FALSE} -# Supprimer l'objet géométrie du dataframe data_ars -data_ars_eso <- data_ars_eso |> - sf::st_drop_geometry() - -# Réaliser une jointure attributaire -station_eso <- station_eso |> - dplyr::left_join(data_ars_eso, by = c("code_station" = "code_bss")) |> - dplyr::mutate(code_sise_eaux = ifelse(is.na(code_sise_eaux), code_captage, code_sise_eaux)) |> - dplyr::select(-code_captage) # Supprime la colonne code_captage -``` - -Identification des doublons générés par la jointure de récupération des `code_sise_eaux` : - -```{r get_duplicates_code_sise_eaux, eval = FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sise_eaux <- station_eso |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire - doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - sf::st_drop_geometry() - station_eso_sans_geom <- station_eso |> sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sise_eaux <- doublons_stations_code_sise_eaux |> - dplyr::left_join(station_eso_sans_geom, by = "code_station") |> - dplyr::select(code_station, n, code_sise_eaux, libelle_station) - -# Visualiser les doublons -print(doublons_stations_code_sise_eaux) -``` - -Suppression des doublons : - -```{r delete_duplicates_code_sise_eaux, eval = FALSE} -station_eso <- station_eso |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final - -```{r select_station_eso_variables, eval = FALSE} -station_eso <- station_eso |> - dplyr::select(code_station, - code_sise_eaux, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : - -```{r archive_old_table, eval = FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_eso", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get_comments_old_table, eval = FALSE} -station_eso_comments <- datalibaba::get_table_comments(table = "station_eso", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : - -```{r publish_new_table, eval = FALSE} -datalibaba::poster_data(data = station_eso, - table = "station_eso", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish_new_table_comment, eval = FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de souterraines (source : ARS + Hub'eau, ", date_today, ")"), - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish_new_fields_comments, eval = FALSE} -datalibaba::post_dico_attr(dico = station_eso_comments, - table = "station_eso", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - -## Mise à jour du skeleton - diff --git a/vignettes/mise-a-jour-des-stations-esu.Rmd b/vignettes/mise-a-jour-des-stations-esu.Rmd deleted file mode 100644 index e7e82bfc2e49c7c5e8f52b0037644d407e425c6d..0000000000000000000000000000000000000000 --- a/vignettes/mise-a-jour-des-stations-esu.Rmd +++ /dev/null @@ -1,402 +0,0 @@ ---- -title: "Mise à jour des stations ESU" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{mise-a-jour-des-stations-esu} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -```{r setup} -library(data.captages) -``` - -<!-- WARNING - This vignette is generated by {fusen} from dev/flat_update_station_esu.Rmd: do not edit by hand --> - -# Objectif - -Actualiser les **stations de mesure eau de surface (ESU)** à partir des tables suivantes dans une base de données PostgreSQL : - -- `sandre.n_station_mesure_eaux_surface_loire_bretagne` (source : SANDRE) -- `captages.n_captage_p_r52` (source : ARS) - - -# Chargement des lot de données source - -## Stations de mesure de la qualité des eaux superficielles continentales (STQ) - -```{r load-hubeau_qualite_rivieres_station_pc, eval = FALSE} -data_sandre <- datalibaba::importer_data( - table = "n_station_mesure_eaux_surface_loire_bretagne", - schema = "sandre", - db = "si_eau") -``` - -## Captages ARS ESU - -```{r load_captages_ars_eso, eval = FALSE} -data_ars_esu <- datalibaba::importer_data( - table = "n_captage_p_r52", - schema = "captages", - db = "si_eau") |> - dplyr::filter(nature_eau_captage == 'ESU') -``` - -Suppression des géométries vides : - -```{r delete-empty-geom, eval = FALSE} -data_ars_with_geom = data_ars_esu[!sf::st_is_empty(data_ars_esu),,drop=FALSE] -``` - -# Création d'un dataframe unique - -## Sélection des captages ARS différents de SANDRE - -```{r select-captages-ars-not-hubeau, eval = FALSE} -# Effectuer l'opération anti_join après avoir supprimé la géométrie -data_ars_not_sandre <- data_ars_with_geom |> - sf::st_drop_geometry() |> - dplyr::anti_join(data_sandre, by = c("code_captage" = "code_station")) - -# Récupérer les géométries par jointure avec stations_esu_ars -data_ars_not_sandre <- data_ars_not_sandre |> - dplyr::left_join(data_ars_esu, by = "code_captage") - -# Désélectionner toutes les variables finissant par .y dans la jointure -data_ars_not_sandre <- dplyr::select(data_ars_not_sandre, - -ends_with(".y")) - -# Renommer toutes les variables en supprimant le suffixe .x -names(data_ars_not_sandre) <- gsub("\\.x$", "", - names(data_ars_not_sandre)) -``` - -## Consolidation des stations SANDRE - -Sélection des variables et ajout de la source : - -```{r consolidate-stations_hubeau, eval = FALSE} -stations_esu_sandre <- data_sandre |> - dplyr::mutate(source = "SANDRE") |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_commune, - the_geom) - -# Convertir les dates de la variable date_creation -stations_esu_sandre$date_creation <- as.Date(stations_esu_sandre$date_creation) -``` - -## Consolidation des stations ARS - -Renommage des variables, ajout de la source, sélection des variables : - -```{r consolidate-stations_ars, eval = FALSE} -stations_esu_ars <- data_ars_not_sandre |> - dplyr::rename(code_station = code_captage, - libelle_station = nom_captage, - date_creation = date_etat_installation, - code_commune = code_commune_captage) |> - dplyr::mutate(source = "ARS") |> - dplyr::select(code_station,libelle_station,date_creation, - source,code_commune,the_geom) -``` - -## Fusion des deux dataframes - -```{r merge-stations, eval = FALSE} -station_esu <- dplyr::bind_rows(stations_esu_sandre, stations_esu_ars) -``` - -# Ajout des champs manquants au dataframe station_esu - -## Ajout du `code_sage` par station - -Chargement de la table des SAGE en Pays de la Loire : - -```{r load-sage, eval = FALSE} -n_sage_r52 <- datalibaba::importer_data( - table = "n_sage_r52", - schema = "zonages_de_gestion", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure du `code_sage` dans `station_esu` : - -```{r update-code-sage, eval = FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_sage_r52 |> dplyr::select(code_sage = code), join = sf::st_within, left = TRUE) -``` - -Identification des doublons générés par la superposition de périmètres dans la table des SAGE : - -```{r get-station-duplicates-code_sage, eval = FALSE} -# Compter les occurrences de chaque code_station -doublons_stations_code_sage <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_stations_code_sage <- doublons_stations_code_sage |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_stations_code_sage <- doublons_stations_code_sage |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_sage_r52, by = c("code_sage" = "code")) |> - dplyr::select(code_station, n, libelle_station, code_sage, nom, the_geom.x) - -# Visualiser les doublons -print(doublons_stations_code_sage) -``` - -Suppression des doublons (optionnel) : - -```{r delete-station-duplicates-code-sage, eval = FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -Ajout de la valeur `SAGE00000` si la valeur de `code_sage` est NA : - -```{r replace-code-sage-na, eval = FALSE} -station_esu <- station_esu |> - dplyr::mutate(code_sage = tidyr::replace_na(code_sage, "SAGE00000")) -``` - -## Ajout des variables liées aux bassins versant - -Il s'agit des variables : `code_bassin_versant`, `code_masse_eau` et `code_eu_masse_eau` - -Chargement de la table des bassins versants France entière : - -```{r load-bassin-versant, eval = FALSE} -n_bassin_versant_specifique_000 <- datalibaba::importer_data( - table = "n_bassin_versant_specifique_000", - schema = "sandre", - db = "si_eau" -) -``` - -Requête spatiale pour la jointure des champs `code_bassin_versant`, `code_masse_eau`, `code_eu_masse_eau` dans `station_esu` : - -```{r update-codes-bassin-versant-masse-eau, eval = FALSE} -# Réaliser une jointure spatiale -station_esu <- station_esu |> - sf::st_join(n_bassin_versant_specifique_000 |> - dplyr::select(code_bassin_versant = code_bassin_versant_specifique, - code_masse_eau, - code_eu_masse_eau), - join = sf::st_within, left = TRUE) -``` - -Fusion des variables pour conserver un maximum de valeurs : - -```{r merge-variables, eval = FALSE} -# Fusionner les variables code_masse_eau.x et code_masse_eau.y, code_eu_masse_eau.x et code_eu_masse_eau.y -station_esu <- station_esu |> - dplyr::mutate(code_masse_eau = dplyr::coalesce(code_masse_eau.x, code_masse_eau.y)) |> - dplyr::select(-code_masse_eau.x, -code_masse_eau.y) # Supprimer les colonnes inutiles -``` - -Identification des doublons générés par la superposition de périmètres dans la table des bassins versants : - -```{r get_duplicates_code_bassin_versant, eval = FALSE} -# Compter les occurrences de chaque code_station -doublons_code_bassin_versant <- station_esu |> - dplyr::group_by(code_station) |> - dplyr::tally(name = "n") |> - dplyr::filter(n > 1) - -# Supprimer l'objet géométrique pour pouvoir exécuter la jointure attributaire -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - sf::st_drop_geometry() - -# Joindre les informations additionnelles -doublons_code_bassin_versant <- doublons_code_bassin_versant |> - dplyr::left_join(station_esu, by = "code_station") |> - dplyr::left_join(n_bassin_versant_specifique_000, by = c("code_bassin_versant" = "code_bassin_versant_specifique")) |> - dplyr::select(code_station, n, libelle_station, code_bassin_versant, nom_bassin_versant_specifique, the_geom.x) - -# Visualiser les doublons -print(doublons_code_bassin_versant) -``` - -Suppression des doublons (optionnel) : - -```{r delete_duplicates_code_bassin_versant, eval = FALSE} -station_esu <- station_esu |> - dplyr::group_by(code_station, the_geom) |> dplyr::slice(1) |> dplyr::ungroup() -``` - -## Ajout du champs `captage_prioriaire` - -Chargement de la table des captages prioritaires de la région : - -```{r load-captage-prioritaire, eval = FALSE} -r_captage_prioritaire_r52 <- datalibaba::importer_data( - table = "r_captage_prioritaire_r52", - schema = "captages", - db = "si_eau" -) -``` - -Ajout de la variable captage_prioritaire - -```{r update-captage-prioriaire, eval = FALSE} -# Alimenter la variable en vérifiant la présence du `code_station` dans `r_captage_prioritaire_r52` -station_esu <- station_esu |> - dplyr::mutate(captage_prioritaire = - code_station %in% r_captage_prioritaire_r52$code_sise_eaux) -``` - -# Intersection des stations ESU avec les SAGE de la région et les limites régionales - -Chargement de la table des limites de la région : - -```{r load-region, eval = FALSE} -n_region_exp_r52 <- datalibaba::importer_data( - table = "n_region_exp_r52", - schema = "adminexpress", - db = "referentiels" -) -``` - -Vérification des objets sf : - -```{r st_as_sf, eval = FALSE} -# Vérifier que les deux dataframes sont en format 'sf' -station_esu <- sf::st_as_sf(station_esu) -n_sage_r52 <- sf::st_as_sf(n_sage_r52) -n_region_exp_r52 <- sf::st_as_sf(n_region_exp_r52) - -``` - -Création d'un polygone fusionnant SAGE et région : - -```{r limit_sage, eval = FALSE} -# Identification des noms de colonnes communs aux deux objets -colonnes_communes <- intersect(names(n_region_exp_r52), names(n_sage_r52)) - -# Sélection des colonnes communes dans chaque objet -n_region_exp_r52 <- n_region_exp_r52[, colonnes_communes] -n_sage_r52 <- n_sage_r52[, colonnes_communes] - -# Combinaison des deux objets dans un seul objet sf -# (création d'une seule collection de géométries pour pouvoir les fusionner) -objets_combines <- rbind(n_region_exp_r52, n_sage_r52) - -# Agrégation de tous les polygones en un seul avec st_union() -# (si les polygones se chevauchent ou sont adjacents, ils seront fusionnés) -n_sage_r52_union <- sf::st_union(objets_combines) - -# Correction de la géométrie, pour s'assurer qu'elle est valide -n_sage_r52_valid <- sf::st_make_valid(n_sage_r52_union) - -# Suppresion des trous internes en récupérant uniquement la limite extérieure -n_sage_r52_limit <- nngeo::st_remove_holes(n_sage_r52_valid) - -``` - -Sélection des stations ESU présentes dans les SAGE et la région : - -```{r st_intersects_stations_sage, eval = FALSE} -# Filtrer les stations ESU présentes dans les SAGE de la région -station_esu <- sf::st_filter(station_esu, n_sage_r52_limit) - -``` - -# Publication dans une table dans la base de données - -## Sélection des variables à conserver dans le dataframe final - -```{r select-station-esu-variables, eval = FALSE} -station_esu <- station_esu |> - dplyr::select(code_station, - libelle_station, - date_creation, - source, - code_masse_eau, - code_eu_masse_eau, - code_commune, - code_sage, - code_bassin_versant, - captage_prioritaire, - the_geom) -``` - -## Archivage de la version précédente de la table - -La version précédente de l'export est stockée dans un schéma d'archive : - -```{r archive-old-table, eval = FALSE} -connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", - table = "station_esu", - schema = "stations", - new_schema = "zz_archives", - role = "admin") -``` - -## Récupération des commentaires de la version précédente de la table - -```{r get-comments-old-table, eval = FALSE} -station_esu_comments <- datalibaba::get_table_comments(table = "station_esu", - schema = "stations", - db = "si_eau") |> - dplyr::filter(!is.na(nom_col)) |> - dplyr::select(nom_col, commentaire) |> - dplyr::arrange(nom_col) -``` - -## Publication de la table actualisée - -La table actualisée écrase la précédente version : - -```{r publish-new-table, eval = FALSE} -datalibaba::poster_data(data = station_esu, - table = "station_esu", - schema = "stations", - db = "si_eau", - pk = "code_station", - overwrite = TRUE, - user = "admin") -``` - -## Publication de la description de la table actualisée - -```{r publish-new-table-comment, eval = FALSE} -date_today <- format(Sys.time(), format = "%d/%m/%Y") -datalibaba::commenter_table( - comment = glue::glue("Table des stations de mesure des eaux de surface (ESU) (source : ARS + SANDRE, ", date_today, ")"), - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" -) -``` - -## Publication des commentaires des champs de la table actualisée - -```{r publish-new-fields-comments, eval = FALSE} -datalibaba::post_dico_attr(dico = station_esu_comments, - table = "station_esu", - schema = "stations", - db = "si_eau", - user = "admin" - ) -``` - diff --git a/vignettes/mise-a-jour-des-stations-hub-eau-cours-d-eau-et-plan-d-eau.Rmd b/vignettes/mise-a-jour-des-stations-hub-eau-cours-d-eau-et-plan-d-eau.Rmd index bc8d80768e40ba7fd4459804319a26e2b919addc..17af4d49402d45256089f0293a0c681290287de2 100644 --- a/vignettes/mise-a-jour-des-stations-hub-eau-cours-d-eau-et-plan-d-eau.Rmd +++ b/vignettes/mise-a-jour-des-stations-hub-eau-cours-d-eau-et-plan-d-eau.Rmd @@ -2,7 +2,7 @@ title: "Mise à jour des stations Hub'eau cours d'eau et plan d'eau" output: rmarkdown::html_vignette vignette: > - %\VignetteIndexEntry{mise-a-jour-des-stations-hub-eau-cours-d-eau-et-plan-d-eau} + %\VignetteIndexEntry{Mise à jour des stations Hub'eau cours d'eau et plan d'eau} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- @@ -14,73 +14,84 @@ knitr::opts_chunk$set( ) ``` -```{r setup} +```{r} library(data.captages) ``` <!-- WARNING - This vignette is generated by {fusen} from dev/flat_update_hubeau_qualite_rivieres_station_pc.Rmd: do not edit by hand --> -# Objectif -Actualiser les **stations de mesures physicochimique sur des cours d'eau et plan d'eau** à partir de l'[API Hub'eau "Qualité des cours d'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans une base de données PostgreSQL. +# Objectif + +Actualiser les **stations de mesures physicochimique sur des cours d'eau et plan d'eau** à partir de l'[API Hub'eau "Qualit\u00e9 des cours d\'eau"](https://hubeau.eaufrance.fr/page/api-qualite-cours-deau) dans une base de données PostgreSQL. + # Création du dataframe ## Récupération des données Téléchargement du lot de données avec l'identifiant de la région : +```{r get-qualite-nappes-stations} +#| eval: no -```{r get-qualite-nappes-stations, eval = FALSE} hubeau_qualite_rivieres_station_pc <- hubeau::get_qualite_rivieres_station_pc(code_region="52") ``` + ## Création d'un champs de géométrie +```{r create-the-geom} +#| eval: no -```{r create-the-geom, eval = FALSE} # Création de la géométrie hubeau_sf <- create_hubeau_geom(hubeau_qualite_rivieres_station_pc) ``` -## Remplacement des caractères accentués impactés par un problème d'encodage +## Remplacement des caractères accentués impactés par un problème d'encodage Dans la variable `libelle_station` : +```{r replace-encoding-problems} +#| eval: no -```{r replace-encoding-problems, eval = FALSE} # Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<e0>", "À", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<e0>", "\u00c0", hubeau_sf$libelle_station) # Remplacer <e0> par À dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c0>", "À", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c0>", "\u00c0", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c8>", "È", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c8>", "\u00c8", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c9>", "É", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c9>", "\u00c9", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<c2>", "Â", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<c2>", "\u00c2", hubeau_sf$libelle_station) # Remplacer <c8> par È dans la colonne libelle_station -hubeau_sf$libelle_station <- gsub("<d4>", "Ô", hubeau_sf$libelle_station) +hubeau_sf$libelle_station <- gsub("<d4>", "\u00d4", hubeau_sf$libelle_station) ``` + # Publication de la table en base ## Archivage de la version précédente de la table La version précédente de la table est stockée dans un schéma d'archive : +```{r archive-old-table} +#| eval: no -```{r archive-old-table, eval = FALSE} connexion <- datalibaba::connect_to_db(db = "si_eau") -collectr::archive_table(database = "si_eau", +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", table = "hubeau_qualite_rivieres_station_pc", schema = "qualite_cours_d_eau", new_schema = "zz_archives", role = "admin") ``` + ## Publication de la table actualisée La table actualisée écrase la précédente version : +```{r publish-new-table} +#| eval: no -```{r publish-new-table, eval = FALSE} datalibaba::poster_data(data = hubeau_sf, table = "hubeau_qualite_rivieres_station_pc", schema = "qualite_cours_d_eau", @@ -90,12 +101,14 @@ datalibaba::poster_data(data = hubeau_sf, user = "admin") ``` + ## Publication de la description de la table actualisée +```{r publish-new-table-comment} +#| eval: no -```{r publish-new-table-comment, eval = FALSE} date_today <- format(Sys.time(), format = "%d/%m/%Y") datalibaba::commenter_table( - comment = glue::glue("Stations de mesures physicochimique sur des cours d'eau et plan d'eau (eau de surface : ESU) (source : Hub'eau)"), + comment = glue::glue("Stations de mesures physicochimique sur des cours d\'eau et plan d\'eau (eau de surface : ESU) (source : Hub\'eau)"), table = "hubeau_qualite_rivieres_station_pc", schema = "qualite_cours_d_eau", db = "si_eau", @@ -103,58 +116,62 @@ datalibaba::commenter_table( ) ``` + +## Ajout de la contrainte géomatique concernant le type de géométries + ## Ajout des commentaires +```{r add-comments} +#| eval: no -```{r add-comments, eval = FALSE} # Création d'une liste avec les noms des variables et leurs descriptions variables <- c( - "code_station", "Code Sandre de la station de mesure. dans le référentiel national Sandre Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/stq.json", - "libelle_station", "Libellé Sandre de la station de mesure", + "code_station", "Code Sandre de la station de mesure. dans le r\u00e9f\u00e9rentiel national Sandre Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/stq.json", + "libelle_station", "Libell\u00e9 Sandre de la station de mesure", "uri_station", "URI station Sandre", - "durete", "Dureté moyenne de l'eau", - "coordonnee_x", "Coordonnée X du point caractéristique de la station de mesure", - "coordonnee_y", "Coordonnée Y du point caractéristique de la station de mesure", - "code_projection", "Code Sandre du système de projection des coordonnées de la station de mesure", - "libelle_projection", "Libellé Sandre du système de projection des coordonnées de la station de mesure", - "longitude", "Longitude la station de mesure dans le système de coordonnées WGS84", - "latitude", "Latitude de la station de mesure dans le système de coordonnées WGS84", + "durete", "Duret\u00e9 moyenne de l\'eau", + "coordonnee_x", "Coordonn\u00e9e X du point caract\u00e9ristique de la station de mesure", + "coordonnee_y", "Coordonn\u00e9e Y du point caract\u00e9ristique de la station de mesure", + "code_projection", "Code Sandre du syst\u00e8me de projection des coordonn\u00e9es de la station de mesure", + "libelle_projection", "Libell\u00e9 Sandre du syst\u00e8me de projection des coordonn\u00e9es de la station de mesure", + "longitude", "Longitude la station de mesure dans le syst\u00e8me de coordonn\u00e9es WGS84", + "latitude", "Latitude de la station de mesure dans le syst\u00e8me de coordonn\u00e9es WGS84", "code_commune", "Code INSEE de la commune de rattachement de la station de mesure", - "libelle_commune", "Libellé de la commune de rattachement de la station de mesure", - "code_departement", "Code INSEE du département de rattachement de la station de mesure", - "libelle_departement", "Libellé du département de rattachement de la station de mesure", - "code_region", "Code INSEE de la région de rattachement de la station de mesure", - "libelle_region", "Libellé INSEE de la région de rattachement de la station de mesure", - "code_cours_eau", "Code Sandre de l'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/cea.json (cours d'eau) et https://api.sandre.eaufrance.fr/referentiels/v1/pla.json (plan d'eau)", - "nom_cours_eau", "Libellé long Sandre de l'entité hydrographique associée à la station de mesure", - "uri_cours_eau", "URI du cours d'eau", - "nom_masse_deau", "Libellé de la masse d'eau de rattachement de la station de mesure", - "code_masse_deau", "Code national de la masse d'eau associé à la station de mesure", - "code_eu_masse_deau", "Code européen de la masse d'eau associé à la station de mesure", - "uri_masse_deau", "URI national de la masse d'eau de la station de mesure", - "code_eu_sous_bassin", "Code européen du sous-bassin DCE administratif", - "nom_sous_bassin", "Libellé du sous bassin DCE administratif", + "libelle_commune", "Libell\u00e9 de la commune de rattachement de la station de mesure", + "code_departement", "Code INSEE du d\u00e9partement de rattachement de la station de mesure", + "libelle_departement", "Libell\u00e9 du d\u00e9partement de rattachement de la station de mesure", + "code_region", "Code INSEE de la r\u00e9gion de rattachement de la station de mesure", + "libelle_region", "Libell\u00e9 INSEE de la r\u00e9gion de rattachement de la station de mesure", + "code_cours_eau", "Code Sandre de l\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/cea.json (cours d\'eau) et https://api.sandre.eaufrance.fr/referentiels/v1/pla.json (plan d\'eau)", + "nom_cours_eau", "Libell\u00e9 long Sandre de l\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure", + "uri_cours_eau", "URI du cours d\'eau", + "nom_masse_deau", "Libell\u00e9 de la masse d\'eau de rattachement de la station de mesure", + "code_masse_deau", "Code national de la masse d\'eau associ\u00e9 \u00e0 la station de mesure", + "code_eu_masse_deau", "Code europ\u00e9en de la masse d\'eau associ\u00e9 \u00e0 la station de mesure", + "uri_masse_deau", "URI national de la masse d\'eau de la station de mesure", + "code_eu_sous_bassin", "Code europ\u00e9en du sous-bassin DCE administratif", + "nom_sous_bassin", "Libell\u00e9 du sous bassin DCE administratif", "uri_sous_bassin", "URI du sous-bassin DCE", "code_bassin", "Code national du bassin DCE", - "code_eu_bassin", "Code européen du bassin DCE", - "nom_bassin", "Libellé du bassin DCE", + "code_eu_bassin", "Code europ\u00e9en du bassin DCE", + "nom_bassin", "Libell\u00e9 du bassin DCE", "uri_bassin", "URI du bassin DCE", - "type_entite_hydro", "Code Sandre de la nature d'entité hydrographique associée à la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/796.json", + "type_entite_hydro", "Code Sandre de la nature d\'entit\u00e9 hydrographique associ\u00e9e \u00e0 la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/796.json", "commentaire", "Commentaire sur la station de mesure", - "date_creation", "Date de création de la station de mesure", - "date_arret", "Date d'arrêt d'activité de la station de mesure", - "date_maj_information", "Date de mise à jour des informations sur la station de mesure", - "finalite", "Code Sandre de la finalité de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/645.json", - "localisation_precise", "Localisation précise de la station de mesure", + "date_creation", "Date de cr\u00e9ation de la station de mesure", + "date_arret", "Date d\'arr\u00eat d\'activit\u00e9 de la station de mesure", + "date_maj_information", "Date de mise \u00e0 jour des informations sur la station de mesure", + "finalite", "Code Sandre de la finalit\u00e9 de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/645.json", + "localisation_precise", "Localisation pr\u00e9cise de la station de mesure", "nature", "Code Sandre de la nature de la station de mesure. Liste sur https://api.sandre.eaufrance.fr/referentiels/v1/nsa/62.json", - "altitude_point_caracteristique", "Altitude du point caractéristique de la station de mesure", - "point_kilometrique", "Pk du point caractéristique sur le tronçon de l'entité hydrographique principale associée à la station de mesure", - "premier_mois_annee_etiage", "Premier mois de l'année d'étiage de la station de mesure", - "superficie_bassin_versant_reel", "Superficie réelle du bassin versant réel", + "altitude_point_caracteristique", "Altitude du point caract\u00e9ristique de la station de mesure", + "point_kilometrique", "Pk du point caract\u00e9ristique sur le tron\u00e7on de l\'entit\u00e9 hydrographique principale associ\u00e9e \u00e0 la station de mesure", + "premier_mois_annee_etiage", "Premier mois de l\'ann\u00e9e d\'\u00e9tiage de la station de mesure", + "superficie_bassin_versant_reel", "Superficie r\u00e9elle du bassin versant r\u00e9el", "superficie_bassin_versant_topo", "Superficie topographique du bassin versant topographique", - "geometry_type", "Type de géométrie", - "geometry_crs_type", "Type de valeur du système de référence spatial", - "geometry_crs_properties_name", "Système de référence spatial", - "the_geom", "Géométrie de la station de mesure" + "geometry_type", "Type de g\u00e9om\u00e9trie", + "geometry_crs_type", "Type de valeur du syst\u00e8me de r\u00e9f\u00e9rence spatial", + "geometry_crs_properties_name", "Syst\u00e8me de r\u00e9f\u00e9rence spatial", + "the_geom", "G\u00e9om\u00e9trie de la station de mesure" ) # Créer le dataframe avec les variables @@ -174,3 +191,5 @@ datalibaba::post_dico_attr( ) ``` + + diff --git a/vignettes/mise-a-jour-des-stations-hubeau-nappes-d-eau-souterraine.Rmd b/vignettes/mise-a-jour-des-stations-hubeau-nappes-d-eau-souterraine.Rmd new file mode 100644 index 0000000000000000000000000000000000000000..120697a04d2dfe2fa2a2a9206a91bd7f9f9e46f1 --- /dev/null +++ b/vignettes/mise-a-jour-des-stations-hubeau-nappes-d-eau-souterraine.Rmd @@ -0,0 +1,249 @@ +--- +title: "Mise à jour des stations Hubeau nappes d'eau souterraine" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{Mise à jour des stations Hubeau nappes d'eau souterraine} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r} +library(data.captages) +``` + +<!-- WARNING - This vignette is generated by {fusen} from dev/flat_update_hubeau_qualite_nappe_station.Rmd: do not edit by hand --> + + + + +# Objectif + +Actualiser les **stations de mesure des qualités des nappes d'eau souterraine (ESO)** \u00e0 partir de l'[API Hub'eau \"Qualit\u00e9 des nappes d'eau souterraine"](https://hubeau.eaufrance.fr/page/api-qualite-nappes) dans une base de données PostgreSQL. + +# Création du dataframe + +## Collecte des données + +Téléchargement des données du bassin Loire-Bretagne : +```{r get_hubeau_qualite_nappes_stations_lb} +#| eval: no + +hubeau_qualite_nappes_stations_lb <- hubeau::get_qualite_nappes_stations( + circonscription_administrative_bassin="Loire-Bretagne") +``` + + +Téléchargement des données du bassin Seine-Normandie en Mayenne : +```{r get_hubeau_qualite_nappes_stations_53} +#| eval: no + +hubeau_qualite_nappes_stations_53 <- hubeau::get_qualite_nappes_stations( + circonscription_administrative_bassin="Seine-Normandie",num_departement="53") +``` + + +Fusion des deux dataframes : +```{r merge_hubeau_qualite_nappes_stations} +#| eval: no + +hubeau_qualite_nappes_stations <- dplyr::bind_rows( + hubeau_qualite_nappes_stations_lb, hubeau_qualite_nappes_stations_53) +``` + + +## Création d'un champs de géométrie +```{r create_the_geom} +#| eval: no + +# Création de la géométrie +hubeau_sf <- create_hubeau_geom(hubeau_qualite_nappes_stations) +``` + + +# Publication de la table en base + +## Archivage de la version précédente de la table + +La version précédente de la table est stockée dans un schéma d'archive : +```{r archive_old_table} +#| eval: no + +# connexion <- datalibaba::connect_to_db(db = "si_eau") +collectr::archive_table(host = Sys.getenv("server"), + database = "si_eau", + table = "hubeau_qualite_nappes_stations", + schema = "qualite_nappes_eau_souterraine", + new_schema = "zz_archives", + role = "admin") +``` + + +## Publication de la table actualisée + +La table actualisée écrase la précédente version : +```{r publish_new_table} +#| eval: no + +datalibaba::poster_data(data = hubeau_sf, + table = "hubeau_qualite_nappes_stations", + schema = "qualite_nappes_eau_souterraine", + db = "si_eau", + pk = "bss_id", + overwrite = TRUE, + user = "admin") +``` + + +## Ajout de la contrainte géomatique concernant le type de géométries + +## Publication de la description de la table actualisée +```{r publish_new_table_comment} +#| eval: no + +date_today <- format(Sys.time(), format = "%d/%m/%Y") +datalibaba::commenter_table( + comment = glue::glue("Stations de mesure des qualit\u00e9s des nappes d\'eau souterraine (ESO) - Bassin Loire-Bretagne (source : Hub\'eau)"), + table = "hubeau_qualite_nappes_stations", + schema = "qualite_nappes_eau_souterraine", + db = "si_eau", + user = "admin" +) +``` + + +## Ajout des commentaires +```{r add_comments} +#| eval: no + +# Création d'une liste avec les noms des variables et leurs descriptions +variables <- c( + "bss_id", "Nouveau code national de la station, cf plus d\'info ici http://infoterre.brgm.fr/nouveau-code-bss", + "code_bss", "Ancien code de la station (code BSS)", + "urn_bss", "URN de la station", + "date_debut_mesure", "Date de d\u00e9but des mesures qualit\u00e9 sur cette station", + "date_fin_mesure", "Derni\u00e8re date de mesure qualit\u00e9 connue pour sur cette station", + "precision_coordonnees", "Pr\u00e9cision des coordonn\u00e9es sur cette station", + "longitude", "Longitude la station (WGS84)", + "latitude", "Latitude la station (WGS84)", + "altitude", "Altitude NGF de la station", + "code_insee", "Code insee de la commune o\u00f9 se trouve la station", + "nom_commune", "Nom de la commune o\u00f9 se trouve la station", + "num_departement", "Code du d\u00e9partement o\u00f9 se trouve la station", + "nom_departement", "Nom du d\u00e9partement o\u00f9 se trouve la station", + "nom_region", "Nom nouvelle r\u00e9gion o\u00f9 se trouve la station", + "circonscriptions_administrative_bassin", "Circonscription administrative de bassin concern\u00e9e", + "bassin_dce", "Bassin DCE", + "urn_bassin_dce", "URN du bassin DCE", + "code_nature_pe", "Code de la nature du point d\'eau (forage, puits, source)", + "nom_nature_pe", "Nom de la nature du point d\'eau (forage, puits, source)", + "uri_nature_pe", "URI de la nature du point d\'eau (forage, puits, source)", + "libelle_pe", "Libell\u00e9 du point d\'eau", + "code_caracteristique_aquifere", "Code des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "nom_caracteristique_aquifere", "Nom des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "uri_caracteristique_aquifere", "URI des caract\u00e9ristiques de l\'aquif\u00e8re au droit du point d\'eau", + "code_etat_pe", "Code de l\'\u00e9tat du point d\'eau", + "nom_etat_pe", "Nom de l\'\u00e9tat du point d\'eau", + "uri_etat_pe", "URI de l\'\u00e9tat du point d\'eau", + "code_mode_gisement", "Code du mode de gisement du point d\'eau", + "nom_mode_gisement", "Nom du mode de gisement du point d\'eau", + "uri_mode_gisement", "URI du mode de gisement du point d\'eau", + "profondeur_investigation", "Profondeur d\'investigation (m)", + "commentaire_pe", "Commentaire sur le point d\'eau", + "codes_entite_hg_bdlisa1", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "codes_entite_hg_bdlisa2", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "codes_entite_hg_bdlisa3", "Entit\u00e9 hydrog\u00e9ologique dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa1", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa2", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "noms_entite_hg_bdlisa3", "Noms des entit\u00e9s hydrog\u00e9ologiques li\u00e9es au point d\'eau dans le r\u00e9f\u00e9rentiel bdlisa", + "urns_bdlisa1", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "urns_bdlisa2", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "urns_bdlisa3", "URN des entit\u00e9s hydrog\u00e9ologiques (BDLISA) actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes BDLISA, url vers les fiches PDF BDLISA", + "codes_masse_eau_rap1", "Codes Masses d\'eau de type Rapportage", + "codes_masse_eau_rap2", "Codes Masses d\'eau de type Rapportage", + "noms_masse_eau_rap1", "Noms des masses d\'eau de type \'rapportage\' li\u00e9es au point d\'eau", + "noms_masse_eau_rap2", "Noms des masses d\'eau de type \'rapportage\' li\u00e9es au point d\'eau", + "urns_masse_eau_rap1", "URN des masse d\'eau RAP actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "urns_masse_eau_rap2", "URN des masse d\'eau RAP actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "codes_masse_eau_edl1", "Codes Masses d\'eau de type Etat des lieux", + "codes_masse_eau_edl2", "Codes Masses d\'eau de type Etat des lieux", + "noms_masse_eau_edl1", "Noms des masses d\'eau de type \'\u00e9tat des lieux\' li\u00e9es au point d\'eau", + "noms_masse_eau_edl2", "Noms des masses d\'eau de type \'\u00e9tat des lieux\' li\u00e9es au point d\'eau", + "urns_masse_eau_edl1", "URN des masse d\'eau EDL actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "urns_masse_eau_edl2", "URN des masse d\'eau EDL actuellement associ\u00e9s \u00e0 la station construit \u00e0 partir des codes masse d\'eau, url vers le SANDRE", + "codes_reseau1", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau2", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau3", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau4", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau5", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau6", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau7", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau8", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau9", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau10", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau11", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau12", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau13", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau14", "R\u00e9seaux de mesure concern\u00e9s", + "codes_reseau15", "R\u00e9seaux de mesure concern\u00e9s", + "noms_reseau1", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau2", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau3", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau4", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau5", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau6", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau7", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau8", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau9", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau10", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau11", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau12", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau13", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau14", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "noms_reseau15", "Noms des r\u00e9seaux de mesure concern\u00e9s", + "uris_reseau1", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau2", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau3", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau4", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau5", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau6", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau7", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau8", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau9", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau10", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau11", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau12", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau13", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau14", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "uris_reseau15", "URI des r\u00e9seaux associ\u00e9s \u00e0 la station construit \u00e0 partir des codes r\u00e9seau, url vers le SANDRE", + "geometry_type", "Type de g\u00e9om\u00e9trie", + "geometry_crs_type", "Type de valeur du syst\u00e8me de r\u00e9f\u00e9rence spatial", + "geometry_crs_properties_name", "Syst\u00e8me de r\u00e9f\u00e9rence spatial", + "the_geom", "G\u00e9om\u00e9trie de la station de mesure" +) + +# Créer le dataframe avec les variables +comments <- data.frame( + nom_variable = variables[seq(1, length(variables), by = 2)], + libelle_variable = variables[seq(2, length(variables), by = 2)], + stringsAsFactors = FALSE +) + +# Publier le dictionnaire de données +datalibaba::post_dico_attr( + dico = comments, + table = "hubeau_qualite_nappes_stations", + schema = "qualite_nappes_eau_souterraine", + db = "si_eau", + user = "admin" +) +``` + + +