File size: 3,737 Bytes
0ab0788
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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