Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -7,86 +7,64 @@ import os
|
|
7 |
# Initialize Google Maps API client securely
|
8 |
gmaps = googlemaps.Client(key=os.getenv('GOOGLE_API_KEY')) # Fetch API key from Hugging Face secrets
|
9 |
|
10 |
-
# Function to
|
11 |
-
def
|
12 |
-
|
13 |
-
|
14 |
-
if directions_info:
|
15 |
-
steps = directions_info[0]['legs'][0]['steps']
|
16 |
-
coords = [(step['start_location']['lat'], step['start_location']['lng']) for step in steps]
|
17 |
-
return steps, coords
|
18 |
-
else:
|
19 |
-
return None, None
|
20 |
-
|
21 |
-
# Function to render map with directions
|
22 |
-
def render_folium_map(coords):
|
23 |
-
m = folium.Map(location=[coords[0][0], coords[0][1]], zoom_start=13)
|
24 |
-
folium.PolyLine(coords, color="blue", weight=2.5, opacity=1).add_to(m)
|
25 |
-
return m
|
26 |
-
|
27 |
-
# Function to search nearby medical centers using Google Places API
|
28 |
-
def search_medical_centers(query, location, radius=10000):
|
29 |
-
places_result = gmaps.places_nearby(location, radius=radius, type='hospital', keyword=query)
|
30 |
return places_result.get('results', [])
|
31 |
|
32 |
# Function to get directions and display on Gradio UI
|
33 |
-
def
|
34 |
route_info = ""
|
35 |
m = None # Default to None
|
36 |
|
37 |
-
# Fetch the directions for the route
|
38 |
try:
|
39 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
except Exception as e:
|
41 |
-
|
42 |
-
|
43 |
-
if steps and coords:
|
44 |
-
route_info = [f"{i+1}. {step['html_instructions']}" for i, step in enumerate(steps)]
|
45 |
-
m = render_folium_map(coords)
|
46 |
-
else:
|
47 |
-
route_info = "No available routes."
|
48 |
-
m = folium.Map(location=[20, 0], zoom_start=2) # Default map if no route
|
49 |
-
|
50 |
-
# Fetch nearby medical centers if the location input is provided
|
51 |
-
if current_location and health_professional_query:
|
52 |
-
try:
|
53 |
-
geocode_result = gmaps.geocode(current_location)
|
54 |
-
if geocode_result:
|
55 |
-
location_coords = geocode_result[0]['geometry']['location']
|
56 |
-
lat, lon = location_coords['lat'], location_coords['lng']
|
57 |
-
|
58 |
-
medical_centers = search_medical_centers(health_professional_query, (lat, lon))
|
59 |
-
|
60 |
-
if medical_centers:
|
61 |
-
for center in medical_centers:
|
62 |
-
name = center['name']
|
63 |
-
vicinity = center.get('vicinity', 'N/A')
|
64 |
-
rating = center.get('rating', 'N/A')
|
65 |
-
folium.Marker([center['geometry']['location']['lat'], center['geometry']['location']['lng']],
|
66 |
-
popup=f"{name}\n{vicinity}\nRating: {rating}").add_to(m)
|
67 |
-
else:
|
68 |
-
route_info += "\nNo medical centers found matching your query."
|
69 |
-
else:
|
70 |
-
route_info += "\nCould not retrieve location coordinates."
|
71 |
-
except Exception as e:
|
72 |
-
route_info += f"\nError fetching medical centers: {str(e)}"
|
73 |
|
74 |
# Return both the route info and the map
|
75 |
-
return
|
76 |
|
77 |
# Gradio UI components (Updated for Gradio v3.x)
|
78 |
-
current_location_input = gr.Textbox(value="Honolulu, HI", label="Current Location (
|
79 |
-
|
80 |
-
health_professional_query_input = gr.Textbox(value="
|
81 |
|
82 |
# Output components (Updated for Gradio v3.x)
|
83 |
-
route_info_output = gr.Textbox(label="
|
84 |
-
map_output = gr.HTML(label="Map with
|
85 |
|
86 |
# Create Gradio interface
|
87 |
iface = gr.Interface(
|
88 |
-
fn=
|
89 |
-
inputs=[current_location_input,
|
90 |
outputs=[route_info_output, map_output], # Outputs
|
91 |
live=False # Disable live updates, use button click to trigger the function
|
92 |
)
|
|
|
7 |
# Initialize Google Maps API client securely
|
8 |
gmaps = googlemaps.Client(key=os.getenv('GOOGLE_API_KEY')) # Fetch API key from Hugging Face secrets
|
9 |
|
10 |
+
# Function to search for health professionals using Google Places API
|
11 |
+
def search_health_professionals(query, location, radius=10000):
|
12 |
+
# Use the query to search for places like doctors, psychiatrists, psychologists, etc., within the specified radius.
|
13 |
+
places_result = gmaps.places_nearby(location, radius=radius, type='doctor', keyword=query)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
14 |
return places_result.get('results', [])
|
15 |
|
16 |
# Function to get directions and display on Gradio UI
|
17 |
+
def get_health_professionals_and_map(current_location, health_professional_query):
|
18 |
route_info = ""
|
19 |
m = None # Default to None
|
20 |
|
|
|
21 |
try:
|
22 |
+
# Geocode the current location (i.e., convert it to latitude and longitude)
|
23 |
+
geocode_result = gmaps.geocode(current_location)
|
24 |
+
if not geocode_result:
|
25 |
+
route_info = "Could not retrieve location coordinates. Please enter a valid location."
|
26 |
+
return route_info, m
|
27 |
+
|
28 |
+
location_coords = geocode_result[0]['geometry']['location']
|
29 |
+
lat, lon = location_coords['lat'], location_coords['lng']
|
30 |
+
|
31 |
+
# Search for health professionals based on the user's query near the current location
|
32 |
+
health_professionals = search_health_professionals(health_professional_query, (lat, lon))
|
33 |
+
|
34 |
+
if health_professionals:
|
35 |
+
route_info = "Health professionals found:\n"
|
36 |
+
m = folium.Map(location=[lat, lon], zoom_start=12)
|
37 |
+
for professional in health_professionals:
|
38 |
+
name = professional['name']
|
39 |
+
vicinity = professional.get('vicinity', 'N/A')
|
40 |
+
rating = professional.get('rating', 'N/A')
|
41 |
+
folium.Marker([professional['geometry']['location']['lat'], professional['geometry']['location']['lng']],
|
42 |
+
popup=f"{name}\n{vicinity}\nRating: {rating}").add_to(m)
|
43 |
+
route_info += f"- {name} ({rating} stars): {vicinity}\n"
|
44 |
+
else:
|
45 |
+
route_info = "No health professionals found matching your query."
|
46 |
+
m = folium.Map(location=[lat, lon], zoom_start=12) # Default map if no professionals are found
|
47 |
+
|
48 |
except Exception as e:
|
49 |
+
route_info = f"Error: {str(e)}"
|
50 |
+
m = folium.Map(location=[20, 0], zoom_start=2) # Default map if any error occurs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
51 |
|
52 |
# Return both the route info and the map
|
53 |
+
return route_info, m._repr_html_()
|
54 |
|
55 |
# Gradio UI components (Updated for Gradio v3.x)
|
56 |
+
current_location_input = gr.Textbox(value="Honolulu, HI", label="Current Location (Hawaii)")
|
57 |
+
|
58 |
+
health_professional_query_input = gr.Textbox(value="doctor", label="Health Professional Query (e.g., doctor, psychiatrist, psychologist)")
|
59 |
|
60 |
# Output components (Updated for Gradio v3.x)
|
61 |
+
route_info_output = gr.Textbox(label="Health Professionals Information")
|
62 |
+
map_output = gr.HTML(label="Map with Health Professionals")
|
63 |
|
64 |
# Create Gradio interface
|
65 |
iface = gr.Interface(
|
66 |
+
fn=get_health_professionals_and_map, # Function to call
|
67 |
+
inputs=[current_location_input, health_professional_query_input], # Inputs
|
68 |
outputs=[route_info_output, map_output], # Outputs
|
69 |
live=False # Disable live updates, use button click to trigger the function
|
70 |
)
|