File size: 2,169 Bytes
f573549
66ab386
03a899a
66ab386
ca4f05f
f573549
 
 
 
 
03a899a
f573549
 
 
 
 
 
 
 
66ab386
 
 
 
 
 
 
 
 
 
 
 
 
3a270e4
03a899a
 
 
 
 
f1fed16
f573549
 
 
 
 
 
 
f1fed16
f573549
f1fed16
f573549
 
f1fed16
f573549
f1fed16
 
66ab386
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
import streamlit as st
from streamlit_folium import folium_static
import googlemaps
import folium
import os
from datetime import datetime

def get_directions(source, destination):
    now = datetime.now()
    directions_info = {}
    modes = ['driving', 'walking', 'bicycling', 'transit']
    for mode in modes:
        directions_result = gmaps.directions(source, destination, mode=mode, departure_time=now)
        if directions_result:
            directions_info[mode] = directions_result[0]['legs'][0]['steps']
        else:
            directions_info[mode] = "No available routes."
    return directions_info

def render_folium_map(source, destination):
    source_location = gmaps.geocode(source)
    destination_location = gmaps.geocode(destination)
    
    source_coords = source_location[0]['geometry']['location']
    dest_coords = destination_location[0]['geometry']['location']
    
    m = folium.Map(location=[source_coords['lat'], source_coords['lng']], zoom_start=10)
    
    folium.Marker([source_coords['lat'], source_coords['lng']], tooltip='Source').add_to(m)
    folium.Marker([dest_coords['lat'], dest_coords['lng']], tooltip='Destination').add_to(m)
    
    folium_static(m)

# Initialize Google Maps
gmaps = googlemaps.Client(key=os.getenv('GOOGLE_KEY'))

# Streamlit app
st.title('๐Ÿ—บ๏ธ Google Maps Directions')
st.sidebar.header('๐Ÿ“Œ User Input Features')

source_location = st.sidebar.text_input("Source Location", "Mound, MN")
destination_location = st.sidebar.text_input("Destination Location", "Minneapolis, MN")

if st.sidebar.button('Get Directions'):
    directions_info = get_directions(source_location, destination_location)
    for mode, directions in directions_info.items():
        st.write(f"## Directions by {mode.capitalize()} ๐Ÿ›ฃ๏ธ")
        if directions == "No available routes.":
            st.write("โŒ " + directions)
        else:
            for i, step in enumerate(directions):
                st.write(f"๐Ÿ‘ฃ {i + 1}. {step['html_instructions']}")

    show_map_button = st.button('Show Directions on Map ๐Ÿ—บ๏ธ')
    if show_map_button:
        render_folium_map(source_location, destination_location)