weather-data1 / app.py
Sanjayraju30's picture
Update app.py
febf0a5 verified
import gradio as gr
import plotly.graph_objects as go
from weather_utils import get_weather_by_coordinates
# Hyderabad bounding box (lat/lon)
lat_range = [17.30, 17.55]
lon_range = [78.35, 78.60]
fig = go.Figure(go.Scattergeo(
lon = [],
lat = [],
mode = 'markers',
marker=dict(size=8, color='red'),
))
fig.update_geos(
resolution=50,
scope='asia',
showcountries=False,
showsubunits=False,
lataxis_range=lat_range,
lonaxis_range=lon_range,
showland=True,
landcolor="lightgray",
fitbounds="locations"
)
fig.update_layout(
title="🗺️ Click anywhere on the map of Hyderabad",
geo=dict(bgcolor='white'),
margin={"r":0,"t":30,"l":0,"b":0},
)
def handle_click(trace, points, state):
if points.point_inds:
i = points.point_inds[0]
lat = points.lat[i]
lon = points.lon[i]
return get_weather_by_coordinates(lat, lon)
return "Please click on the map."
def simulate_click_map():
return fig
demo = gr.Interface(
fn=None,
inputs=[],
outputs=gr.Markdown(label="Weather Info"),
live=False,
title="🌦️ Hyderabad Weather Map",
description="Click on the map to get real-time weather",
)
demo = gr.Blocks()
with demo:
gr.Markdown("## 🌦️ Hyderabad Weather Forecast Map")
map_plot = gr.Plot(value=simulate_click_map)
coords = gr.Textbox(label="Latitude, Longitude (Click the map below)")
result = gr.Markdown()
def get_weather_from_click(latlon):
if not latlon:
return "No coordinates clicked"
lat, lon = map(float, latlon.split(","))
return get_weather_by_coordinates(lat, lon)
def update_coords(evt: gr.SelectData):
lat = evt.value["points"][0]["lat"]
lon = evt.value["points"][0]["lon"]
return f"{lat}, {lon}"
map_plot.select(update_coords, None, coords)
coords.change(get_weather_from_click, coords, result)
demo.launch()