import streamlit as st from DataModel import DataModel from Visualization import Visualization import pandas as pd from streamlit_folium import st_folium def main(edge_id): """ Streamlit Dashbaord for Quality Metric Data as time series from BIQE Monitor :edge_id: biqe monitor edge id """ st.set_page_config(page_title='Straßenabschnitt Analyse', layout='wide') # get data and setup visualization calss data, geom = DataModel().get_data(edge_id, 30) visu = Visualization(data) # head metrics of the shapes cols = st.columns([4,1]) metric_cols = cols[0].columns(5) metric_cols[0].container(border=True).metric('Durchfahrten:', visu.int2str(data['ride_id'].sum())) metric_cols[0].markdown(' ') metric_cols[1].container(border=True).metric('Geschwindigkeit [km/h]', f"{visu.float2str(data['speed'].mean())}") metric_cols[2].container(border=True).metric('Wunschgeschwindigkeit [%]', f"{visu.float2str(100*data['norm_speed'].mean())}") metric_cols[3].container(border=True).metric('Zeitverlust [Sekunden]', f"{visu.float2str(data['time_loss'].mean())}") metric_cols[4].container(border=True).metric('Standzeit [Sekunden]', f"{visu.float2str(100*data['waiting'].mean())}") # show shape on map with cols[1]: st_folium(visu.create_map(geom), returned_objects=[], key=f'Map', use_container_width=True) # create user filter and aggregate data based on the filter parameter visu.filter_component(cols[0]) visu.aggregate_data() # timeline plot cols[0].markdown(f"{visu.selected_metric} pro {visu.selected_time}", help=visu.helper_plot_regions()) cols[0].plotly_chart(visu.timeline_plot_plotly(), use_container_width=True) if __name__ == '__main__': # handle empty query parameter or processing edge/osm id if 'edge_id' not in st.query_params: edge_id = [] else: edge_id = st.query_params['edge_id'].split('_')[0] main(edge_id)