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)