Spaces:
Sleeping
Sleeping
File size: 2,821 Bytes
089a35b 14219c3 089a35b 14219c3 089a35b ec9afde 14219c3 6b3fb98 089a35b 14219c3 ec9afde 6b3fb98 14219c3 89c08b5 14219c3 7712e1d 14219c3 7712e1d 14219c3 7712e1d 14219c3 6b3fb98 14219c3 7712e1d 14219c3 ec9afde 089a35b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
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)
|