def affichage_courbe_capteur(selectedData, chantier): try: ''' SelectedData : dictionnaire retourner par plotly lors d'une sélection sur la zone graphique''' '''En fonction du type de capteur sélectionné sur la carte la méthode appelle des focntions spécifiques pour récuper les données les mettre en forme et tracer les courbes''' customdata = selectedData["points"][0]["customdata"] text = selectedData["points"][0]["text"] if customdata == "cible": df = memoized_data(chantier, "actif", "topographie", "topo.csv") df = utils_topo.format_df(df, text, angle=0, repere="xyz") fig = utils_topo.graph_topo(df, height=550, spacing=0.06, showlegend=False) elif customdata == "inclino": fig = utils_inclino.graph_inclino(chantier, text, height=550) elif customdata == "tirant": fig = utils_tirant.graph_tirant(chantier, text, height=550, mode=2) elif customdata == "jauge": fig = utils_jauge.graph_jauge(chantier, text, height=550) elif customdata == "piezo": fig = utils_piezo.graph_piezo(chantier, text) else: fig = empty_figure() return (text, fig, sous_titre(customdata)) except: return "", empty_figure(), "Aucune donnée existante pour cet élément"
def update_graph_3D(focus, sizeref, secteur_selected, chantier): if secteur_selected == {}: return empty_figure() else: try: df = format_df_vector( memoized_data(chantier, "actif", "topographie", "topo.csv") ) secteur = secteur_selected["secteur"] cibles = secteur_selected["cible"] with engine.connect() as con: query1 = f"SELECT * FROM cible_param where nom_chantier = '{chantier}' and masquer = 'x'" query3 = f"SELECT * FROM secteur where nom_chantier = '{chantier}' and nom_secteur='{secteur}'" secteur_params = pd.read_sql_query(query3, con=con) cibles_masque = pd.read_sql_query(query1, con=con).nom_capteur.tolist() liste_cibles = df.cible.tolist() for i in cibles_masque: try: liste_cibles.remove(i) except ValueError: pass df = df[df.cible.isin(liste_cibles)] lat1 = secteur_params.lat1[0] lat2 = secteur_params.lat2[0] lon1 = secteur_params.lon1[0] lon2 = secteur_params.lon2[0] return graph_vecteurs(df, lat1, lat2, lon1, lon2, secteur, cibles, sizeref, focus) except KeyError: return empty_figure()
def select_secteur(n_clicks, secteur_selected, chantier): if n_clicks > 0: try: ''' extract_position retourne les positions GPS initiales des cibles topo issues du fichier de déplacement des cibles''' df = extract_position( memoized_data(chantier, "actif", "topographie", "topo.csv")) ''' récupération des coordonées GPS du secteur sélectionné ainsi que les coordonnées de l'ensemble des autres capteurs ''' with engine.connect() as con: query2 = f"SELECT * FROM capteur where nom_chantier = '{chantier}'" query3 = f"SELECT * FROM secteur where nom_chantier = '{chantier}' and nom_secteur='{secteur_selected}'" liste_capteurs = pd.read_sql_query(query2, con=con) liste_secteurs = pd.read_sql_query(query3, con=con) lat1 = liste_secteurs.lat1[0] lat2 = liste_secteurs.lat2[0] lon1 = liste_secteurs.lon1[0] lon2 = liste_secteurs.lon2[0] ''' filtre l'ensmble des cibles dont la latitude et longitude est comprise dans la zone correspondant au secteur et retourne le resultat sous forme d'un dictionnaire''' cibles_select = df[(df.lat > lat1) & (df.lat < lat2) & (df.lon > lon1) & (df.lon < lon2)] cibles_select = {"cible": cibles_select.cible.tolist()} ''' idem pour les autres capteurs''' capteurs_select = liste_capteurs[(liste_capteurs.lon > lon1) & (liste_capteurs.lon < lon2) & (liste_capteurs.lat < lat1) & (liste_capteurs.lat > lat2)] capteurs_select = { type: capteurs_select[capteurs_select.type == type].nom_capteur.tolist() for type in capteurs_select.type } ''' création d'un dictionnaire associant à chaque type de paramètre ses coordonnées correspondantes''' selection = {"secteur": secteur_selected} selection.update(cibles_select) selection.update(capteurs_select) return selection except IndexError: return {} else: return {}
def update_time_serie(ref, secteur_selected, chantier): if secteur_selected == {}: return empty_figure(), "", "" else: secteur = secteur_selected["secteur"] if ref == "secteur": try: with engine.connect() as con: query = f"SELECT * FROM secteur_param WHERE nom_chantier='{chantier}' AND nom_secteur='{secteur}' " angle = pd.read_sql_query(query, con=con).angle[0] subtitle = "N, T, Z (mm)" repere = "ntz" except IndexError: angle = 0 subtitle = "X, Y, Z (mm)" repere = "xyz" else: angle = 0 subtitle = "X, Y, Z (mm)" repere = "xyz" df = memoized_data(chantier, "actif", "topographie", "topo.csv") list_capteur = secteur_selected["cible"] with engine.connect() as con: query1 = f"SELECT * FROM cible_param where nom_chantier = '{chantier}' and masquer = 'x'" cibles_masque = pd.read_sql_query(query1, con=con).nom_capteur.tolist() for i in cibles_masque: try: list_capteur.remove(i) except ValueError: pass if angle == None: df = format_df(df, list_capteur, 0) fig = graph_topo(df, height=700) return fig, "Aucun référentiel renseigné pour ce secteur" else: df = format_df(df, list_capteur, angle, repere=repere) fig = graph_topo(df, height=700) return fig, subtitle, ""
def display_table(tab, chantier): with engine.connect() as con: if tab == 1: ''' Paramètre : Chantier''' query = f"SELECT * FROM chantier WHERE nom_chantier='{chantier}'" parametres = pd.read_sql_query(query, con=con).iloc[:, 1:] return parametres.to_dict("records"), [{ "name": i, "id": i } for i in parametres.columns] if tab == 2: ''' Paramètre : Secteurs''' query1 = f"SELECT * FROM secteur WHERE nom_chantier='{chantier}'" query2 = f"SELECT * FROM secteur_param WHERE nom_chantier='{chantier}'" gauche = pd.read_sql_query( query1, con=con)[["nom_secteur", "nom_chantier"]] droite = pd.read_sql_query(query2, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns] if tab == 3: ''' Paramètre : Cibles''' values = memoized_data(chantier, "actif", "topographie", "topo.csv").columns[1:] liste_cible = [values[3 * i][:-2] for i in range(len(values) // 3)] query = f"select * from cible_param where nom_chantier='{chantier}'" gauche = pd.DataFrame.from_dict({ "nom_capteur": liste_cible, "nom_chantier": [chantier for i in range(len(liste_cible))], }) droite = pd.read_sql_query(query, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns] if tab == 4: ''' Paramètre : Inclinomètres''' query1 = f"SELECT * FROM capteur WHERE nom_chantier='{chantier}' and type='inclino'" query2 = f"SELECT * FROM inclino_param WHERE nom_chantier='{chantier}'" gauche = pd.read_sql_query( query1, con=con)[["nom_capteur", "nom_chantier"]] droite = pd.read_sql_query(query2, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns] if tab == 5: ''' Paramètre : Tirants''' query1 = f"SELECT * FROM capteur WHERE nom_chantier='{chantier}' and type='tirant'" query2 = f"SELECT * FROM inclino_param WHERE nom_chantier='{chantier}'" gauche = pd.read_sql_query( query1, con=con)[["nom_capteur", "nom_chantier"]] droite = pd.read_sql_query(query2, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns] if tab == 6: ''' Paramètre : Jauges''' query1 = f"SELECT * FROM capteur WHERE nom_chantier='{chantier}' and type='jauge'" query2 = f"SELECT * FROM inclino_param WHERE nom_chantier='{chantier}'" gauche = pd.read_sql_query( query1, con=con)[["nom_capteur", "nom_chantier"]] droite = pd.read_sql_query(query2, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns] if tab == 7: ''' Paramètre : Piezomètres''' query1 = f"SELECT * FROM capteur WHERE nom_chantier='{chantier}' and type='piezo'" query2 = f"SELECT * FROM inclino_param WHERE nom_chantier='{chantier}'" gauche = pd.read_sql_query( query1, con=con)[["nom_capteur", "nom_chantier"]] droite = pd.read_sql_query(query2, con=con) result = gauche.merge(droite, how="left") return result.to_dict("records"), [{ "name": i, "id": i } for i in result.columns]