Skip to content
Snippets Groups Projects
Commit f70df396 authored by lisasmah's avatar lisasmah
Browse files

#51 limiter l'affichage à 10 000 premières lignes si la table a plus de 10 000 lignes.

Simplification des géométries pour les grandes tables (> 10 000 lignes) avec `rmapshaper::ms_simplify` :
  -`keep = 0.1` : Conserve 10 % des points d'origine.
  -`keep_shapes = TRUE` : Préserve la forme géométrique originale.
Pas de simplification si la table a moins de 10 000 lignes.
+ affichage d'un message selon le cas
parent d43ddcc4
No related branches found
No related tags found
Loading
......@@ -7,6 +7,7 @@ library(shinygouv)
library(sf)
library(mapview)
library(DBI)
library(rmapshaper)
# chargement du datamart en fonction du contexte d'exécution de l'app
nom_local <- "datamart_catalogue.RData"
adresse_T <- paste0("T:/datalab/SCTE/CATALOGUE/PRODUCTION/", nom_local)
......
......@@ -329,6 +329,7 @@ server <- function(input, output, session) {
title = "Aperçu spatial",
content = fluidPage_dsfr(
uiOutput("map_title"),
uiOutput("map_message"),
leaflet::leafletOutput("map", height = "600px")
)
)
......@@ -396,9 +397,49 @@ server <- function(input, output, session) {
# Mettre à jour la viz carto de la table dans la zone principale de la page
output$map <- renderLeaflet({
req(r$selected_data)
message <- NULL
if (r$isSpatial) {
mapview(r$selected_data, layer.name = "aperçu")@map
if (nrow(r$selected_data) > 10000) {
# Sélectionner les 10 000 premières lignes pour l'affichage
data_to_display <- r$selected_data[1:10000, ]
message <- "Seules les 10 000 premières lignes sont affichées pour optimiser les performances."
# Simplifier les géométries pour les grandes tables
if (inherits(data_to_display, "sf")) {
data_to_display <- rmapshaper::ms_simplify(data_to_display, keep = 0.1, keep_shapes = TRUE) #10 % des points d'origine sont conservés
# keep_shapes = TRUE la forme géométrique originale est préservée
message <- paste(message, "Les géométries ont également été simplifiées.")
}
} else {
# Si la table est petite( nrow < 10000), ne pas simplifier
data_to_display <- r$selected_data
message <- NULL # Aucun message supplémentaire
}
# Affichage du message
output$map_message <- renderUI({
if (!is.null(message)) {
div(
class = "alert alert-info",
style = "margin-bottom: 15px;",
message
)
} else {
NULL
}
})
# Rendu de la carte
mapview(data_to_display, layer.name = "aperçu")@map
} else {
# Cas où les données ne sont pas spatiales
output$map_message <- renderUI({
div(
class = "alert alert-warning",
style = "margin-bottom: 15px;",
"Les données sélectionnées ne contiennent pas d'informations spatiales."
)
})
return(NULL)
}
})
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment