Spaces:
Runtime error
Runtime error
| import random | |
| import pandas as pd | |
| from datetime import datetime, timedelta | |
| import streamlit as st | |
| import pydeck as pdk | |
| # Tekirdağ ili çevresinde rastgele koordinatlar üretir. | |
| def random_coord_tekirdag(): | |
| lat = random.uniform(40.95, 41.05) | |
| lon = random.uniform(27.35, 27.6) | |
| return lat, lon | |
| # Verilen koordinatları 4 ondalık basamağa yuvarlar. | |
| def round_coord(coord): | |
| return round(coord[0], 4), round(coord[1], 4) | |
| # Görev verisi | |
| num_gorev = 5 | |
| gorev_df = pd.DataFrame({ | |
| "Seç" : [True for _ in range(num_gorev)], | |
| "ID" : range(1, num_gorev + 1), | |
| "Görev" : ["Görev "+str(i) for i in range(1, num_gorev + 1)], | |
| "Tür" : [random.choice(["A", "B", "C"]) for _ in range(num_gorev)], | |
| "Konum" : [round_coord(random_coord_tekirdag()) for _ in range(num_gorev)], | |
| "Son Zaman" : [(datetime.now() + timedelta(hours=random.randint(1, 48))).strftime("%Y-%m-%d %H:%M") for _ in range(num_gorev)], | |
| "Öncelik" : [random.choice(["Normal", "Yüksek", "Acil"]) for _ in range(num_gorev)], | |
| "Ekipler" : [",".join(map(str, random.sample(range(1, 6), random.randint(2, 5)))) for _ in range(num_gorev)] | |
| }) | |
| # Ekip verisi | |
| num_ekip = 5 | |
| ekip_df = pd.DataFrame({ | |
| "ID" : range(1, num_ekip + 1), | |
| "Konum" : [round_coord(random_coord_tekirdag()) for _ in range(num_ekip)], | |
| "Görevler" : [[random.choice(gorev_df['ID']) for _ in range(random.randint(1, 3))] for _ in range(num_ekip)] | |
| }) | |
| # streamlit session'undaki gorev_data'yı günceller. | |
| def update_gorev_data(): | |
| gorev_disp = st.session_state.gorev_disp | |
| gorev_data = st.session_state.gorev_data | |
| # "edited_rows" streamlit özelliğidir. | |
| for row, edited in gorev_disp["edited_rows"].items(): | |
| for column, new_value in edited.items(): | |
| gorev_data.loc[row, column] = new_value | |
| # streamlit session'undaki "gorev_df" ve "ekip_df" | |
| # dataframe'lerini tanımlar. | |
| def init_dataframes(): | |
| if "gorev_data" not in st.session_state: | |
| st.session_state.gorev_data = gorev_df | |
| if "ekip_data" not in st.session_state: | |
| st.session_state.ekip_data = ekip_df | |
| # streamlit session'undaki seçilen görevler ve ekipler için ID, | |
| # latitude ve longitude bilgisi bulunduran iki dataframe döndürür. | |
| def create_map_df(): | |
| gData = st.session_state.gorev_data | |
| map_df_gorev = gData[gData["Seç"]==True].copy() | |
| map_df_gorev["lat"] = map_df_gorev["Konum"].apply(lambda x: x[0]) | |
| map_df_gorev["lon"] = map_df_gorev["Konum"].apply(lambda x: x[1]) | |
| map_df_ekip = st.session_state.ekip_data.copy() | |
| map_df_ekip["lat"] = map_df_ekip["Konum"].apply(lambda x: x[0]) | |
| map_df_ekip["lon"] = map_df_ekip["Konum"].apply(lambda x: x[1]) | |
| return map_df_gorev[["ID","lat","lon"]], map_df_ekip[["ID","lat","lon"]] | |
| # initialize dataframes | |
| init_dataframes() | |
| map_df_gorev, map_df_ekip = create_map_df() | |
| # set the layout | |
| st.set_page_config(layout="wide") | |
| # Görevler tablosu | |
| st.subheader("📆 Görevler") | |
| # Data editor | |
| gorev_disp = st.data_editor( | |
| st.session_state.gorev_data, | |
| column_config = { | |
| "Seç" : st.column_config.CheckboxColumn("Seç"), | |
| "Öncelik" : st.column_config.SelectboxColumn("Öncelik", options=["Normal", "Yüksek", "Acil"]) | |
| }, | |
| disabled = ["ID", "Görev", "Tür", "Konum", "Son Zaman"], | |
| hide_index = True, | |
| use_container_width = True, | |
| on_change = update_gorev_data, | |
| key = "gorev_disp" | |
| ) | |
| # separator | |
| st.markdown("---") | |
| # second part of the app | |
| col1, col2, col3 = st.columns([4, 4, 2]) | |
| # "Ekipler" tablosu | |
| with col1: | |
| st.subheader("👨🚀 Ekipler") | |
| st.dataframe(st.session_state.ekip_data, hide_index=True, use_container_width=True) | |
| # Harita | |
| with col2: | |
| st.subheader("🗺️ Harita") | |
| layers = [ | |
| pdk.Layer( | |
| "ScatterplotLayer", | |
| data = map_df_ekip, | |
| get_position = "[lon, lat]", | |
| get_radius = 500, | |
| get_fill_color = [0, 0, 255, 160], | |
| pickable = True | |
| ) | |
| ] | |
| if not map_df_gorev.empty: | |
| layers.append( | |
| pdk.Layer( | |
| "ScatterplotLayer", | |
| data = map_df_gorev, | |
| get_position = "[lon, lat]", | |
| get_radius = 500, | |
| get_fill_color = [255, 0, 0, 160], | |
| pickable = True | |
| ) | |
| ) | |
| st.pydeck_chart( | |
| pdk.Deck( | |
| map_style="mapbox://styles/mapbox/streets-v12", | |
| initial_view_state=pdk.ViewState( | |
| latitude = 41.0, | |
| longitude = 27.5, | |
| zoom = 10, | |
| pitch = 0, | |
| ), | |
| layers = layers, | |
| tooltip = {"text": "{ID}"} | |
| ) | |
| ) | |
| # optimizasyon bölmesi | |
| with col3: | |
| st.subheader("🤖 Optimizasyon") | |
| if st.button("✨ Magic!"): | |
| st.success("Optimizasyon çalıştırıldı. Görevler atandı (sözde). 🎯") |