import folium import streamlit as st import pandas as pd from streamlit_folium import st_folium import time st.set_page_config(layout="wide") if "sleep_time" not in st.session_state: st.session_state.sleep_time = 2 if "auto_refresh" not in st.session_state: st.session_state.auto_refresh = False auto_refresh = st.sidebar.checkbox("Auto Refresh?", st.session_state.auto_refresh) if auto_refresh: number = st.sidebar.number_input("Refresh rate in seconds", value=st.session_state.sleep_time) st.session_state.sleep_time = number st.title("Nt3awnu kamlin نتعاونو كاملين") st.markdown("Help us report more people in need by filling this form: https://forms.gle/nZNCUVog9ka2Vdqu6") def parse_gg_sheet(url): url = url.replace("edit#gid=", "export?format=csv&gid=") df = pd.read_csv(url) # parse latlng (column 4) to [lat, lng] def parse_latlng(latlng): if type(latlng) == str and "," in latlng: lat, lng = latlng.split(",") return [float(lat), float(lng)] else: return None return df.assign(latlng=df.iloc[:, 4].apply(parse_latlng)) df = parse_gg_sheet( "https://docs.google.com/spreadsheets/d/1gYoBBiBo1L18IVakHkf3t1fOGvHWb23loadyFZUeHJs/edit#gid=966953708" ) headers_mapping = { "إغاثة": "Rescue/إغاثة", "مساعدة طبية": "Medical Assistance/مساعدة طبية", "مأوى": "Shelter/مأوى", "طعام وماء": "Food & Water/طعام وماء", "مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "Danger/مخاطر", } colors_mapping = { "إغاثة": "red", "مساعدة طبية": "orange", "مأوى": "yellow", "طعام وماء": "blue", "مخاطر (تسرب الغاز، تلف في الخدمات العامة...)": "grey", } options = ["إغاثة", "مساعدة طبية", "مأوى", "طعام وماء", "مخاطر (تسرب الغاز، تلف في الخدمات العامة...)"] selected_options = [] st.markdown("👉 **Choose request type / اختر نوع الطلب**") cols = st.columns(len(options)) for i, option in enumerate(options): default_value = True if option == "إغاثة" else False checked = cols[i].checkbox(option, value=default_value) if checked: selected_options.append(option) df['id'] = df.index filtered_df = df[df[' What are your needs? / ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)'].isin(selected_options)] selected_headers = [headers_mapping[request] for request in selected_options] st.subheader(", ".join(selected_headers)) m = folium.Map( location=[31.628674, -7.992047], zoom_start=8.5, min_zoom=8.5, max_lat=35.628674, min_lat=29.628674, max_lon=-4.992047, min_lon=-10.992047, max_bounds=True, ) for index, row in filtered_df.iterrows(): request_type = row[' What are your needs? / ما هي احتياجاتك؟ (أضفها إذا لم يتم ذكرها)'] phone = row["رقم الهاتف (اختياري)"] if not pd.isna(row["رقم الهاتف (اختياري)"]) else "" display_text = f"{request_type} {phone}" if row["latlng"] is None: continue folium.Marker( location=row["latlng"], tooltip=row[' لأي قيادة / دوار تنتمون ؟'] if not pd.isna(row[' لأي قيادة / دوار تنتمون ؟']) else None, popup=display_text, icon=folium.Icon(colors_mapping[request_type]) ).add_to(m) st_data = st_folium(m, use_container_width=True) # Google Sheet Table st.markdown( """ """, unsafe_allow_html=True, ) # Google Form # st.markdown( # """ # # """, # unsafe_allow_html=True, # ) if auto_refresh: time.sleep(number) st.experimental_rerun()