ExtremePrecipit / app /pipelines /import_map.py
ncsdecoopman's picture
Déploiement Docker depuis workflow (structure corrigée)
0ab0788
from app.utils.config_utils import echelle_config
from app.utils.map_utils import create_layer, create_scatter_layer, create_tooltip
from app.utils.legends_utils import formalised_legend, display_vertical_color_legend
import pydeck as pdk
def safe_min(*args):
return min(x for x in args if x is not None) if any(x is not None for x in args) else None
def safe_max(*args):
return max(x for x in args if x is not None) if any(x is not None for x in args) else None
def pipeline_map(
params_load,
n_colors:int = 15,
param_view: dict = {"latitude": 46.9, "longitude": 1.7, "zoom": 5}
):
# Déballage des paramètres
stat_choice_key, result, unit_label, height = params_load
# Echelle continue ou discrète
if "continu" in result:
continu = result["continu"]
elif stat_choice_key == "month":
continu = False
else:
continu = True
# Nombre de couleurs
if "categories" in result: # Discret
categories = result["categories"]
n_colors = len(categories)
else:
categories = None
n_colors = n_colors
# Echelle paramétrée par l'utilisateur
if "echelle" not in result: # Choix d'une échelle personnalisée
result["echelle"] = None
# On trouve alors la représéntation de la légende
colormap = echelle_config(continu, echelle=result["echelle"], n_colors=n_colors)
result_df_modelised_show = result["modelised_show"]
result_df_observed_show = result["observed_show"]
# Normalisation des valeurs modélisées
result_df_modelised_show, vmin_mod, vmax_mod = formalised_legend(
result["modelised_show"],
column_to_show=result["column"],
colormap=colormap,
is_categorical=not continu,
categories=categories
)
# Normalisation des observations avec les mêmes bornes
result_df_observed_show, vmin_obs, vmax_obs = formalised_legend(
result["observed_show"],
column_to_show=result["column"],
colormap=colormap,
is_categorical=not continu,
categories=categories
)
# Calcul des bornes communes
if "vmin" in result and "vmax" in result:
vmin_commun, vmax_commun = result["vmin"], result["vmax"]
else:
vmin_commun = safe_min(vmin_mod, vmin_obs)
vmax_commun = safe_max(vmax_mod, vmax_obs)
# Mise à jour de la normalisation pour les deux ensembles de données avec les bornes communes
result_df_modelised_show, _, _ = formalised_legend(
result["modelised_show"],
column_to_show=result["column"],
colormap=colormap,
vmin=vmin_commun,
vmax=vmax_commun,
is_categorical=not continu,
categories=categories
)
result_df_observed_show, _, _ = formalised_legend(
result["observed_show"],
column_to_show=result["column"],
colormap=colormap,
vmin=vmin_commun,
vmax=vmax_commun,
is_categorical=not continu,
categories=categories
)
# Création du layer modélisé et observé
layer = create_layer(result_df_modelised_show)
scatter_layer = create_scatter_layer(result_df_observed_show)
# Tooltip
tooltip = create_tooltip(unit_label)
# View par défaut
view_state = pdk.ViewState(
latitude=param_view["latitude"],
longitude=param_view["longitude"],
zoom=param_view["zoom"]
)
# Légende vertical
legend = display_vertical_color_legend(
height,
colormap,
vmin_commun,
vmax_commun,
n_ticks=n_colors,
label=unit_label,
model_labels=categories
)
return layer, scatter_layer, tooltip, view_state, legend