File size: 5,174 Bytes
f573549
d64aee9
850e430
66ab386
03a899a
f573549
6aa52db
f573549
03a899a
 
 
d64aee9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0fa2633
 
 
 
 
 
850e430
0fa2633
 
850e430
0fa2633
 
 
 
 
 
 
 
 
f67a4e9
0aeb981
f573549
 
 
d64aee9
 
850e430
d64aee9
 
850e430
d64aee9
 
 
 
f573549
850e430
5f87098
d64aee9
 
0fa2633
d64aee9
 
850e430
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d64aee9
0fa2633
850e430
 
 
0aeb981
850e430
0aeb981
850e430
 
 
 
 
0aeb981
d64aee9
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import streamlit as st
import folium
from folium.plugins import MarkerCluster
from streamlit_folium import folium_static
import googlemaps
from datetime import datetime
import os

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

# Function to fetch directions
def get_directions_and_coords(source, destination):
    now = datetime.now()
    directions_info = gmaps.directions(source, destination, mode='driving', departure_time=now)
    if directions_info:
        steps = directions_info[0]['legs'][0]['steps']
        coords = [(step['start_location']['lat'], step['start_location']['lng']) for step in steps]
        return steps, coords
    else:
        return None, None

# Function to render map with directions
def render_folium_map(coords):
    m = folium.Map(location=[coords[0][0], coords[0][1]], zoom_start=13)
    folium.PolyLine(coords, color="blue", weight=2.5, opacity=1).add_to(m)
    return m

# Function to add medical center paths and annotate distance
def add_medical_center_paths(m, source, med_centers):
    for name, lat, lon, specialty, city in med_centers:
        _, coords = get_directions_and_coords(source, (lat, lon))
        if coords:
            folium.PolyLine(coords, color="red", weight=2.5, opacity=1).add_to(m)
            folium.Marker([lat, lon], popup=name).add_to(m)
            distance_info = gmaps.distance_matrix(source, (lat, lon), mode='driving')
            distance = distance_info['rows'][0]['elements'][0]['distance']['text']
            folium.PolyLine(coords, color='red').add_to(m)
            folium.map.Marker(
                [coords[-1][0], coords[-1][1]],
                icon=folium.DivIcon(
                    icon_size=(150, 36),
                    icon_anchor=(0, 0),
                    html=f'<div style="font-size: 10pt; color : red;">{distance}</div>',
                    )
                ).add_to(m)

# Driving Directions Sidebar
st.sidebar.header('Directions πŸš—')
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'):
    steps, coords = get_directions_and_coords(source_location, destination_location)
    if steps and coords:
        st.subheader('Driving Directions:')
        for i, step in enumerate(steps):
            st.write(f"{i+1}. {step['html_instructions']}")
        st.subheader('Route on Map:')
        m1 = render_folium_map(coords)
        folium_static(m1)
    else:
        st.write("No available routes.")

# Minnesota Medical Centers
st.markdown("### πŸ—ΊοΈ Maps - πŸ₯ Minnesota Medical Centers 🌳")
m2 = folium.Map(location=[45.6945, -93.9002], zoom_start=6)
marker_cluster = MarkerCluster().add_to(m2)

# Define Minnesota medical centers data
minnesota_med_centers = [
    ('Mayo Clinic', 44.0224, -92.4658, 'General medical and surgical', 'Rochester'),
    ('University of Minnesota Medical Center', 44.9721, -93.2595, 'Teaching hospital', 'Minneapolis'),
    ('Abbott Northwestern Hospital', 44.9526, -93.2622, 'Heart specialty', 'Minneapolis'),
    ('Regions Hospital', 44.9558, -93.0942, 'Trauma center', 'St. Paul'),
    ('St. Cloud Hospital', 45.5671, -94.1989, 'Multiple specialties', 'St. Cloud'),
    ('Park Nicollet Methodist Hospital', 44.9304, -93.3640, 'General medical and surgical', 'St. Louis Park'),
    ('Fairview Ridges Hospital', 44.7391, -93.2777, 'Community hospital', 'Burnsville'),
    ('Mercy Hospital', 45.1761, -93.3099, 'Acute care', 'Coon Rapids'),
    ('North Memorial Health Hospital', 45.0131, -93.3246, 'General medical and surgical', 'Robbinsdale'),
    ('Essentia Health-Duluth', 46.7860, -92.1011, 'Community hospital', 'Duluth'),
    ('M Health Fairview Southdale Hospital', 44.8806, -93.3241, 'Community hospital', 'Edina'),
    ('Woodwinds Health Campus', 44.9272, -92.9689, 'Community hospital', 'Woodbury'),
    ('United Hospital', 44.9460, -93.1052, 'Acute care', 'St. Paul'),
    ('Buffalo Hospital', 45.1831, -93.8772, 'Community hospital', 'Buffalo'),
    ('Maple Grove Hospital', 45.1206, -93.4790, 'Community hospital', 'Maple Grove'),
    ('Olmsted Medical Center', 44.0234, -92.4610, 'General medical and surgical', 'Rochester'),
    ('Hennepin Healthcare', 44.9738, -93.2605, 'Teaching hospital', 'Minneapolis'),
    ('St. Francis Regional Medical Center', 44.7658, -93.5143, 'Community hospital', 'Shakopee'),
    ('Lakeview Hospital', 45.0422, -92.8137, 'Community hospital', 'Stillwater'),
    ('St. Luke\'s Hospital', 46.7831, -92.1043, 'Community hospital', 'Duluth')
]

# Dropdown to select medical center to focus on
medical_center_names = [center[0] for center in minnesota_med_centers]
selected_medical_center = st.selectbox("Select Medical Center to Focus On:", medical_center_names)

# Zoom into the selected medical center
for name, lat, lon, specialty, city in minnesota_med_centers:
    if name == selected_medical_center:
        m2 = folium.Map(location=[lat, lon], zoom_start=15)

# Annotate distances and paths for each medical center
add_medical_center_paths(m2, source_location, minnesota_med_centers)

folium_static(m2)