File size: 5,183 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 f67a4e9 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 πΊοΈ for π₯ 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)
|