delivery / app.py
darwinharianto's picture
added japanese
8fe8e18
import streamlit as st
import travelling_salesman
import geocoder
import pandas as pd
from st_aggrid import AgGrid, GridOptionsBuilder
import pandas as pd
from enum import Enum
class Language(Enum):
English = 1
Japanese = 2
if 'language' not in st.session_state:
st.session_state['language'] = Language.English
_, col2 = st.columns([5,1])
with col2:
print(st.session_state['language'])
language = st.selectbox("Language" if st.session_state['language'] == Language.English else "言語", ("English", "日本語"))
st.session_state['language'] = Language.English if language == "English" else Language.Japanese
if 'count' not in st.session_state:
st.session_state.count = 2
def increment_counter():
st.session_state.count += 1
def decrement_counter():
st.session_state.count -= 1
source = ["鶴舞公園", "中村公園", "荒子川公園", "久屋大通公園", "愛知公園", "大高緑地", "天白公園", "荒越公園", "池田公園" , "大須公園"]
st.title("Path planning" if st.session_state['language'] == Language.English else "経路検索")
st.write("""
Given target location(s) and vehicle(s), calculates optimum path from depot using OR-tools
""" if st.session_state['language'] == Language.English else """
ターゲットの場所と車両を指定して、OR ツールを使用してデポからの最適なパスを計算
""")
col1, col2, col3 = st.columns([1,1,1])
with col1:
arrival = st.text_input("Depot" if st.session_state['language'] == Language.English else "デポ", value="大須観音駅")
with col2:
numberOfCars = st.number_input("Vehicle(s)" if st.session_state['language'] == Language.English else "台車数", value=1, min_value=1, max_value=5)
with col3:
timeLimit = st.number_input("Calculation Time Limit" if st.session_state['language'] == Language.English else "計算時間", min_value=1, max_value=1000, value=5, step=1)
col3, col4, _ = st.columns([1,1,4])
with col3:
st.button("Decrement" if st.session_state['language'] == Language.English else "加", on_click=decrement_counter)
with col4:
st.button("Increment" if st.session_state['language'] == Language.English else "減", on_click=increment_counter)
col1, col2 = st.columns([1,2])
with col1:
destinations = source[:st.session_state.count]
df = pd.DataFrame(
{
"Target": destinations,
}
)
gb = GridOptionsBuilder.from_dataframe(df)
gb.configure_default_column(editable=True)
aggrid = AgGrid(df,
# height=400,
gridOptions=gb.build(),
fit_columns_on_grid_load=True,
allow_unsafe_jscode=True,
)
with col2:
with st.spinner(text="Generating map..." if st.session_state['language'] == Language.English else "マップ作成中"):
fig = travelling_salesman.visualize_point(tuple(aggrid.data["Target"].to_list()))
if fig is not None:
st.plotly_chart(fig, use_container_width=True)
else:
st.write("No figure" if st.session_state['language'] == Language.English else "無")
search = st.button('Search Route' if st.session_state['language'] == Language.English else "経路検索")
if search:
if geocoder.osm(arrival, timeout=5.0).latlng is None:
st.warning("Depot invalid" if st.session_state['language'] == Language.English else "デポ不明")
elif any(
[
geocoder.osm(arr, timeout=5.0).latlng is None
for arr in df["Target"]
]
):
st.warning("Destination(s) invalid" if st.session_state['language'] == Language.English else "目的地不明")
elif numberOfCars > len( df["Target"]):
st.warning("Vehicle is less than destination!" if st.session_state['language'] == Language.English else "車台数が目的地より多い!")
else:
with st.spinner('Calculating'):
fig = travelling_salesman.create_route(
arrival, df["Target"], numberOfCars, timeLimit=timeLimit
)
if fig is not None:
st.plotly_chart(fig, use_container_width=True)
else:
st.write("No figure" if st.session_state['language'] == Language.English else "無")