pjgerrits commited on
Commit
2b57c0b
1 Parent(s): 2b9fdf3

app updates

Browse files
Files changed (2) hide show
  1. app.py +52 -43
  2. requirements.txt +2 -1
app.py CHANGED
@@ -1,7 +1,9 @@
1
  import streamlit as st
 
 
 
2
  import psycopg2
3
  import pandas as pd
4
- import pydeck as pdk
5
 
6
  st.set_page_config(layout="wide")
7
 
@@ -67,55 +69,62 @@ time_of_day = st.sidebar.selectbox("Time of Day", ["Morning", "Afternoon", "Even
67
  day_of_week = st.sidebar.selectbox("Day of the Week", ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
68
  description = st.sidebar.text_area("Why did you get lost?")
69
 
70
- # Map interaction
71
- st.sidebar.title("Select Points on Map")
72
- point_type = st.sidebar.radio("Select Point Type", ["start", "lost", "end"])
73
-
74
  if 'points' not in st.session_state:
75
  st.session_state['points'] = {'start': None, 'lost': None, 'end': None}
76
 
77
- def map_click(lat, lon):
78
- st.session_state['points'][point_type] = (lat, lon)
79
-
80
- st.sidebar.write("Click on the map to select points.")
81
-
82
- # Map display
83
- map_data = pd.DataFrame([
84
- {'lat': st.session_state['points']['start'][0], 'lon': st.session_state['points']['start'][1]} if st.session_state['points']['start'] else {'lat': None, 'lon': None},
85
- {'lat': st.session_state['points']['lost'][0], 'lon': st.session_state['points']['lost'][1]} if st.session_state['points']['lost'] else {'lat': None, 'lon': None},
86
- {'lat': st.session_state['points']['end'][0], 'lon': st.session_state['points']['end'][1]} if st.session_state['points']['end'] else {'lat': None, 'lon': None}
87
- ])
88
-
89
- map_data.dropna(inplace=True)
90
-
91
- layer = pdk.Layer(
92
- 'ScatterplotLayer',
93
- data=map_data,
94
- get_position='[lon, lat]',
95
- get_color='[200, 30, 0, 160]',
96
- get_radius=200,
 
 
 
 
 
 
 
 
 
 
97
  )
 
 
 
98
 
99
- view_state = pdk.ViewState(
100
- latitude=map_data['lat'].mean() if not map_data.empty else 0,
101
- longitude=map_data['lon'].mean() if not map_data.empty else 0,
102
- zoom=10,
103
- pitch=0,
104
- )
105
 
106
- r = pdk.Deck(
107
- map_style='mapbox://styles/mapbox/light-v9',
108
- layers=[layer],
109
- initial_view_state=view_state,
110
- tooltip={"text": "{pointType} point at {lat}, {lon}"}
111
- )
112
 
113
- st.pydeck_chart(r)
 
114
 
115
- if st.button("Save"):
116
  submit_data(age, gender, transport, multi_transport, time_of_day, day_of_week, description, st.session_state['points'])
117
 
118
- st.markdown("---")
119
- st.markdown("For a more detailed survey, click the link or scan the QR code:")
120
- st.markdown("[https://arcg.is/1GK5jP0](https://arcg.is/1GK5jP0)")
121
- st.image("static/Getting Lost Survey.png", width=200)
 
1
  import streamlit as st
2
+ import folium
3
+ from streamlit_folium import st_folium
4
+ from folium.plugins import Draw, Geocoder, MiniMap
5
  import psycopg2
6
  import pandas as pd
 
7
 
8
  st.set_page_config(layout="wide")
9
 
 
69
  day_of_week = st.sidebar.selectbox("Day of the Week", ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"])
70
  description = st.sidebar.text_area("Why did you get lost?")
71
 
72
+ # Initialize points in session state
 
 
 
73
  if 'points' not in st.session_state:
74
  st.session_state['points'] = {'start': None, 'lost': None, 'end': None}
75
 
76
+ # Map interaction
77
+ st.title("Select Points on the Map")
78
+
79
+ # Selector for point type
80
+ point_type = st.radio("Select Point Type to Add", ["start", "lost", "end"])
81
+
82
+ # Initialize map
83
+ m = folium.Map(location=[51.5074, -0.1278], zoom_start=10, control_scale=True)
84
+
85
+ # Add existing points to the map
86
+ for pointType, coords in st.session_state['points'].items():
87
+ if coords:
88
+ folium.Marker(
89
+ location=coords,
90
+ popup=pointType,
91
+ icon=folium.Icon(color="red" if pointType == "start" else "blue" if pointType == "end" else "orange")
92
+ ).add_to(m)
93
+
94
+ # Add click functionality without creating popups
95
+ draw = Draw(
96
+ export=False,
97
+ draw_options={
98
+ "circle": False,
99
+ "polyline": False,
100
+ "polygon": False,
101
+ "rectangle": False,
102
+ "circlemarker": False,
103
+ "marker": True,
104
+ },
105
+ edit_options={"edit": False}
106
  )
107
+ draw.add_to(m)
108
+ Geocoder(add_marker=True).add_to(m)
109
+ MiniMap().add_to(m)
110
 
111
+ # Display map
112
+ output = st_folium(m, width="100%", height=600, key="map")
 
 
 
 
113
 
114
+ # Check for map click data
115
+ if output and 'last_clicked' in output and output['last_clicked'] is not None:
116
+ lat = output['last_clicked']['lat']
117
+ lon = output['last_clicked']['lng']
118
+ st.session_state['points'][point_type] = (lat, lon)
119
+ st.experimental_rerun()
120
 
121
+ # Display current points
122
+ st.write("Current Points:", st.session_state['points'])
123
 
124
+ if st.sidebar.button("Save"):
125
  submit_data(age, gender, transport, multi_transport, time_of_day, day_of_week, description, st.session_state['points'])
126
 
127
+ st.sidebar.markdown("---")
128
+ st.sidebar.markdown("For a more detailed survey, click the link or scan the QR code:")
129
+ st.sidebar.markdown("[https://arcg.is/1GK5jP0](https://arcg.is/1GK5jP0)")
130
+ st.sidebar.image("static/Getting Lost Survey.png", width=200)
requirements.txt CHANGED
@@ -4,5 +4,6 @@
4
  streamlit
5
  psycopg2-binary
6
  pandas
7
- pydeck
 
8
 
 
4
  streamlit
5
  psycopg2-binary
6
  pandas
7
+ folium
8
+ streamlit_folium
9