library(mapdO) library(dplyr)
Démo ici
Repo github ici
Pour l'instant, deux modules:
Les deux jeux de données sont pour l'instant différents pour les deux modules:
il faudra, in fine, homogénéiser ça quand les jeux de données "définitifs" seront disponibles. Pour le module {modèles régionaux}, j'utilise le jeu de données d'Elise sur RMC. Cela me permet de tester différents types de combinaisons de variables x-y. Par contre le référentiel n'est pas le même que celui utilisé pour le module {profils}. Cela devrait être réglé lorsqu'on utilisera des données récentes et propres pour ce module.
Quelques points à discuter pour améliorer la lisibilité de l'appli:
Pour l'instant j'ai appelé l'appli mapdO et j'ai fait un faux logo vite fait pour la démo.
J'ai choisi un menu type "tabs" pour les différents modules mais on peut sans difficulté tester des types de menus différents.
La disposition côte à côte (sur la largeur) de la carte et du graphique permet à mon avis de tirer parti au maximum de l'écran.
Pour l'instant l'appli fonctionne sur mon compte Shiny Server huma-num, et ne repose que sur R/shiny (pas d'intégration des données sur QGIS server, pas de dockerisation pour l'instant).
#fs::dir_tree("../data-raw/extdata/IsereEtAffluents/AX0005/METRICS")
listFunctions <- function(function.name, all_functions){ function_code <- deparse(get(function.name)) %>% paste(collapse=" ") tib_result=tibble::tibble(called_functions=all_functions) %>% mutate(detect=paste0(called_functions,"\\s*\\(")) %>% group_by(detect) %>% mutate(detected=purrr::map_lgl(.x=detect, ~stringr::str_detect(function_code,.x))) %>% filter(detected) %>% ungroup() %>% select(called_functions) return(tib_result) }
funs_mapdO=tibble(functions=ls("package:mapdO")) %>% mutate(app_utils=stringr::str_detect(functions,"mod_|app")) %>% mutate(app_ui=stringr::str_detect(functions,"_ui")) %>% filter(app_ui==FALSE) %>% group_by(functions,app_utils) %>% mutate(calls_functions=purrr::map(functions,listFunctions,all_functions=.$functions)) %>% tidyr::unnest(cols=calls_functions) nodes=funs_mapdO$functions %>% unique() %>% paste(collapse=";") edges=funs_mapdO %>% dplyr::mutate(edges=purrr::map2_chr(.x=functions, .y=called_functions, ~ paste(.x,"->",.y))) %>% dplyr::pull(edges) %>% paste(collapse=" ") DiagrammeR::grViz(paste(" digraph boxes_and_circles { # a 'graph' statement graph [overlap = true, fontsize = 10] # several 'node' statements node [shape = box, fontname = Helvetica]", nodes, edges, "}") )
Tables de correspondance
table_metrics table_regmod
Bouquin de ThinkR sur golem ici
golem aide à écrire une appli "production-ready" et repose sur divers principes
une appli=un package. On retrouve de ce fait un certain nombre de principes liés à la construction d'un package (documentation, fourniture de données comme faisant partie du package, écriture de vignette, tests, etc.) => package usethis notamment.
une appli= un assortiment de modules qui fonctionnent indépendamment les uns des autres. De ce fait, chaque module correspond à un "namespace" qui lui est propre. Voir article de C. Girard "La communication entre modles et ses caprices" ici si besoin de faire passer des éléments d'un module à l'autre.
Attention, fonctionnement de Shiny Server avec la version de R 3.5 pour le moment (alors que Shiny Desktop a par défaut la version 3.6).
Par ailleurs, les packages chargés par Shiny Server peuvent être ceux installés par Huma-Num plutôt que les packages "User" => problèmes éventuels avec les versions des packages, par exemple package vctrs
.
Ajout des lignes de commande suivantes dans app.R:
mylibraries=c(.libPaths(), "../../../R/x86_64-pc-linux-gnu-library/3.5") library(vctrs,lib.loc=mylibraries) library(rlang,lib.loc=mylibraries)
Forcer le render de guidelines:
rmarkdown::render("vignettes/guidelines.Rmd")
Données EBF Grands Axes Ce n'est pas encore parfait, mais c'est ce que j'ai pu faire rapidement ; je n'ai pas réussi à rassembler tous les profils en travers dans un seul fichier et il manque les variables calculées pour le tracé en plan. Je vous enverrai un update quand j'aurais réglé mes derniers problèmes de cuisine.
L'archive contient :
un docx avec les tableaux des métriques
un dossier 'Référentiel hydro' avec le référentiel hydrographique dérivé de la BD Topo (14 octobre 2020) constitué des cours d'eau d'une longueur > 10 km ayant un identifiant BD Carthage ; deux versions : FINAL = réseau de tronçons BDT correctement connectés les uns aux autres, AGG = tronçons agrégés par axe hydrographique. Identifiant numérique des axes hydrographiques = champ AXIS. Chaque axe hydrographique a aussi un identifiant BD Carthage CdEntiteHydr
un dossier 'Hypsomètres' avec les hypsomètres par zone hydro et classe d'occupation du sol
un dossier 'Grands Axes' avec les données EBF pour les 19 cours d'eau les plus longs du bassin du Rhône, avec :
REF_HYDRO => un extrait du référentiel hydrographique avec les grands axes + les axes de référence (REFAXIS.shp) qui correspondent ici à l'axe médian du FDV
L'archive contient :
un docx avec les tableaux des métriques
un dossier 'Référentiel hydro' avec le référentiel hydrographique dérivé de la BD Topo (14 octobre 2020) constitué des cours d'eau d'une longueur > 10 km ayant un identifiant BD Carthage ; deux versions : FINAL = réseau de tronçons BDT correctement connectés les uns aux autres, AGG = tronçons agrégés par axe hydrographique. Identifiant numérique des axes hydrographiques = champ AXIS. Chaque axe hydrographique a aussi un identifiant BD Carthage CdEntiteHydr
un dossier 'Hypsomètres' avec les hypsomètres par zone hydro et classe d'occupation du sol
un dossier 'Grands Axes' avec les données EBF pour les 19 cours d'eau les plus longs du bassin du Rhône, avec :
REF_HYDRO => un extrait du référentiel hydrographique avec les grands axes + les axes de référence (REFAXIS.shp) qui correspondent ici à l'axe médian du FDV
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.