diff --git "a/app/\360\237\223\243 Home.py" "b/app/\360\237\223\243 Home.py" index 800a4cd..cd8cbfb 100644 --- "a/app/\360\237\223\243 Home.py" +++ "b/app/\360\237\223\243 Home.py" @@ -6,6 +6,8 @@ import requests import streamlit as st from streamlit_folium import st_folium +from st_aggrid import AgGrid, GridOptionsBuilder, GridUpdateMode, ColumnsAutoSizeMode +from st_aggrid.shared import JsCode st.set_page_config(layout="wide") @@ -21,10 +23,13 @@ def get_icon_color(label: Union[bool, None]): return "gray" -def create_map(chart_data): +def create_map(chart_data, location=None): chart_data = chart_data.fillna("") # center map on the mean of the coordinates - if len(chart_data) > 0: + + if location is not None: + m = folium.Map(location=location, zoom_start=18) + elif len(chart_data) > 0: m = folium.Map( location=[chart_data["latitude"].mean(), chart_data["longitude"].mean()], zoom_start=11, @@ -106,12 +111,38 @@ def get_table_cameras_with_images(dataframe): return table_data +def get_agrid_table(data_with_image): + # Configure AgGrid + gb = GridOptionsBuilder.from_dataframe(data_with_image) + gb.configure_selection("single", use_checkbox=False) + gb.configure_side_bar() # if you need a side bar + gb.configure_pagination(paginationAutoPageSize=False, paginationPageSize=20) + + # configure individual columns + gb.configure_column( + "id_camera", header_name="ID Camera", editable=False, pinned="left" + ) + gb.configure_column("emoji", header_name="", editable=False, pinned="left") + gb.configure_column("object", header_name="Objeto", editable=False) + gb.configure_column("image_url", header_name="URL Imagem") + + # # Set auto size mode + grid_response = AgGrid( + data_with_image, + gridOptions=gb.build(), + columns_auto_size_mode=ColumnsAutoSizeMode.FIT_CONTENTS, + # height=400, + # width=1200, + ) + + selected_row = grid_response["selected_rows"] + return selected_row + + chart_data, last_update = load_alagamento_detectado_ia() data_with_image = get_table_cameras_with_images(chart_data) - folium_map = create_map(chart_data) -## front st.markdown("# Mapa de Alagamentos | Vision AI") st.markdown( @@ -122,40 +153,27 @@ def get_table_cameras_with_images(dataframe): - Total: {len(chart_data)} - Sucessos: {len(data_with_image)} - Falhas:{len(chart_data) - len(data_with_image)} + + Selecione uma Camera para visualizar no mapa. """, ) -st.dataframe( - data_with_image, - column_config={ - "emoji": st.column_config.Column( - "", - ), - "id_camera": st.column_config.Column( - "ID Camera", - help="ID Camera", - # width="medium", - required=True, - ), - "object": st.column_config.Column( - "Objeto", - help="Objeto", - # width="medium", - required=True, - ), - "image_url": st.column_config.LinkColumn( - "URL Imagem", - help="ID Camera", - # width="medium", - required=True, - ), - }, - # hide_index=True, - use_container_width=True, -) +selected_row = get_agrid_table(data_with_image) + +if selected_row: + selected_camera_id = selected_row[0]["id_camera"] + camera_data = chart_data[chart_data["id_camera"] == selected_camera_id] + if not camera_data.empty: + camera_location = [ + camera_data.iloc[0]["latitude"], + camera_data.iloc[0]["longitude"], + ] + folium_map = create_map(chart_data, location=camera_location) + map_data = st_folium(folium_map, key="map", height=600, width=1200) +else: + map_data = st_folium(folium_map, key="fig1", height=600, width=1200) -map_data = st_folium(folium_map, key="fig1", height=600, width=1200) # select chart_data obj based on last_object_clicked coordinates obj_coord = map_data["last_object_clicked"] diff --git a/poetry.lock b/poetry.lock index fbbe2b4..95e99fb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.0 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "altair" @@ -1307,6 +1307,17 @@ files = [ [package.dependencies] six = ">=1.5" +[[package]] +name = "python-decouple" +version = "3.8" +description = "Strict separation of settings from code." +optional = false +python-versions = "*" +files = [ + {file = "python-decouple-3.8.tar.gz", hash = "sha256:ba6e2657d4f376ecc46f77a3a615e058d93ba5e465c01bbe57289bfb7cce680f"}, + {file = "python_decouple-3.8-py3-none-any.whl", hash = "sha256:d0d45340815b25f4de59c974b855bb38d03151d81b037d9e3f463b0c9f8cbd66"}, +] + [[package]] name = "pytz" version = "2023.3.post1" @@ -1615,6 +1626,22 @@ watchdog = {version = ">=2.1.5", markers = "platform_system != \"Darwin\""} [package.extras] snowflake = ["snowflake-connector-python (>=2.8.0)", "snowflake-snowpark-python (>=0.9.0)"] +[[package]] +name = "streamlit-aggrid" +version = "0.3.4.post3" +description = "Streamlit component implementation of ag-grid" +optional = false +python-versions = ">=3.8" +files = [ + {file = "streamlit-aggrid-0.3.4.post3.tar.gz", hash = "sha256:0cb9332199e7735289a673efabc913e1a3466cc188bc025bec2c50c32ab1989a"}, + {file = "streamlit_aggrid-0.3.4.post3-py3-none-any.whl", hash = "sha256:b909117eb90cfdb855b1c74e694e9ec97554c101baaafb7339eaf885d1f4e49c"}, +] + +[package.dependencies] +pandas = ">=1.2" +python-decouple = ">=3.6,<4.0" +streamlit = ">=0.87.0" + [[package]] name = "streamlit-autorefresh" version = "1.0.1" @@ -1981,4 +2008,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "8916feb1fc10a6f7080c272049efa4ada1a9163d806637c755f6892e09a60e84" +content-hash = "bc97bd14f624e41e58a1f3a9c12be68849ad251136b7f328199d16a3233fed5c" diff --git a/pyproject.toml b/pyproject.toml index bcc26c7..d7c27f7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,6 +13,7 @@ streamlit-folium = "^0.15.1" streamlit-extras = "^0.3.5" streamlit-autorefresh = "^1.0.1" pillow = "^10.1.0" +streamlit-aggrid = "^0.3.4.post3" [build-system]