earthquake-dashboard / app /dashboard.py
pareshmishra
added external url logic for data
89c08b5
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)