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)