Spaces:
Sleeping
Sleeping
import streamlit as st | |
import requests | |
import folium | |
from streamlit_folium import folium_static | |
from datetime import datetime | |
st.set_page_config(layout="wide") | |
st.title("π Earthquake AI Event Map") | |
# Define backend API URLs | |
LOCAL_EVENTS_URL = "https://overflowing-intuition-production.up.railway.app/events" | |
EXTERNAL_EVENTS_URL = "https://overflowing-intuition-production.up.railway.app/external-events" | |
# Color scheme | |
icon_color = { | |
"mainshock": "red", | |
"aftershock": "orange", | |
"foreshock": "blue", | |
"seismic_event": "green", | |
"tremor": "gray", | |
"impact": "black" | |
} | |
# β FIXED initialization | |
local_events = [] | |
external_events = [] | |
# Load local events | |
try: | |
response = requests.get(LOCAL_EVENTS_URL) | |
local_events = response.json() | |
except Exception as e: | |
st.error(f"β Failed to load local events: {e}") | |
local_events = [] | |
# Load external seismic data | |
load_global = st.checkbox("Show Global Seismic Events (USGS)", value=True) | |
if load_global: | |
try: | |
ext_response = requests.get(EXTERNAL_EVENTS_URL) | |
data = ext_response.json() | |
# if its list | |
if isinstance(data,list): | |
external_events=data | |
elif isinstance(data,dict): | |
external_events=[data] | |
else: | |
external_events=[] | |
except Exception as e: | |
st.warning(f"β οΈ Failed to load external data: {e}") | |
external_events = [] | |
else: | |
external_events = [] | |
# Determine map center | |
all_events = local_events + external_events | |
if all_events: | |
first = all_events[0] | |
map_center = [first.get("lat", 20.5937), first.get("lon", 78.9629)] | |
else: | |
map_center = [20.5937, 78.9629] # India default | |
m = folium.Map(location=map_center, zoom_start=3) | |
# Add local markers | |
for event in local_events: | |
if isinstance(event, dict): | |
lat = event.get("lat", 0) | |
lon = event.get("lon", 0) | |
label = event.get("label", "tremor") | |
ts = event.get("timestamp", "") | |
color = icon_color.get(label, "gray") | |
folium.Marker( | |
[lat, lon], | |
tooltip=f"π {label} @ {ts}", | |
icon=folium.Icon(color=color) | |
).add_to(m) | |
# Add global markers (USGS) | |
for event in external_events: | |
if isinstance(event, dict): | |
lat = event.get("lat", 0) | |
lon = event.get("lon", 0) | |
label = event.get("label", "USGS Event") | |
ts = event.get("timestamp", "") | |
if isinstance(ts, (int, float)): | |
ts = datetime.utcfromtimestamp(ts / 1000).strftime("%Y-%m-%d %H:%M:%S") | |
folium.CircleMarker( | |
location=[lat, lon], | |
radius=6, | |
color="purple", | |
fill=True, | |
fill_color="purple", | |
fill_opacity=0.7, | |
tooltip=f"π {label} @ {ts}" | |
).add_to(m) | |
folium_static(m) | |