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) | |