Ritu-AI / scripts /fetch_imd_data.py
SeriousSam07's picture
features- Enhanced Map and what if simlulation and heat pockets.
0c02b78
Raw History Blame Contribute Delete
4.21 kB
import os
import json
import imdlib as imd
import numpy as np
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
CITIES = {
"Mumbai": {"lat": 18.9878, "lon": 72.8364},
"Pune": {"lat": 18.5204, "lon": 73.8567},
"Nagpur": {"lat": 21.1458, "lon": 79.0882},
"Nashik": {"lat": 19.9975, "lon": 73.7898},
"Chhatrapati Sambhajinagar": {"lat": 19.8762, "lon": 75.3433},
"Panaji": {"lat": 15.4909, "lon": 73.8278},
"Margao": {"lat": 15.2736, "lon": 73.9580},
"Vasco da Gama": {"lat": 15.3973, "lon": 73.8122},
"Mapusa": {"lat": 15.5937, "lon": 73.8105},
"Ponda": {"lat": 15.4026, "lon": 74.0156},
"Bicholim": {"lat": 15.5908, "lon": 73.9525},
"Curchorem": {"lat": 15.2530, "lon": 74.1165},
"Sanguem": {"lat": 15.2289, "lon": 74.1539},
"Canacona": {"lat": 15.0118, "lon": 74.0223},
"Pernem": {"lat": 15.7187, "lon": 73.7997},
"Bengaluru": {"lat": 12.9716, "lon": 77.5946},
"Mysuru": {"lat": 12.2958, "lon": 76.6394},
"Hubballi": {"lat": 15.3647, "lon": 75.1240},
"Mangaluru": {"lat": 12.9141, "lon": 74.8560},
"Belagavi": {"lat": 15.8497, "lon": 74.4977},
"Kalaburagi": {"lat": 17.3297, "lon": 76.8343},
"Davanagere": {"lat": 14.4644, "lon": 75.9218},
"Ballari": {"lat": 15.1394, "lon": 76.9214},
"Vijayapura": {"lat": 16.8302, "lon": 75.7100},
"Shivamogga": {"lat": 13.9299, "lon": 75.5681},
"Tumakuru": {"lat": 13.3392, "lon": 77.1010},
"Raichur": {"lat": 16.2076, "lon": 77.3463},
"Bidar": {"lat": 17.9104, "lon": 77.5199},
"Hosapete": {"lat": 15.2711, "lon": 76.3908},
"Gadag": {"lat": 15.4297, "lon": 75.6322},
"Hassan": {"lat": 13.0033, "lon": 76.1004},
"Udupi": {"lat": 13.3409, "lon": 74.7421},
"Chitradurga": {"lat": 14.2251, "lon": 76.3980},
"Kolar": {"lat": 13.1367, "lon": 78.1291},
"Mandya": {"lat": 12.5218, "lon": 76.8951}
}
def fetch_and_process():
# 2014 to 2023 (10 complete years)
start_yr = 2014
end_yr = 2023
file_dir = './imd_raw_data'
os.makedirs(file_dir, exist_ok=True)
variables = ['tmax', 'tmin', 'rain']
datasets = {}
for var in variables:
print(f"Downloading {var} from {start_yr} to {end_yr}...")
try:
imd.get_data(var, start_yr, end_yr, fn_format='yearwise', file_dir=file_dir)
data = imd.open_data(var, start_yr, end_yr, 'yearwise', file_dir)
datasets[var] = data.get_xarray()
print(f"Successfully loaded {var} dataset.")
except Exception as e:
print(f"Error processing {var}: {e}")
return
# Extract historical extremes for each city
results = {}
print("Processing historical data for cities...")
for city_name, coords in CITIES.items():
lat = coords['lat']
lon = coords['lon']
city_data = {}
try:
for var in variables:
ds = datasets[var]
# Nearest grid point
ts = ds[var].sel(lat=lat, lon=lon, method='nearest')
# We replace 99.9 (IMD nodata) with NaN
ts = ts.where(ts < 99.9)
if var == 'tmax':
city_data['all_time_max'] = float(ts.max().values)
city_data['avg_max'] = float(ts.mean().values)
elif var == 'tmin':
city_data['all_time_min'] = float(ts.min().values)
elif var == 'rain':
city_data['max_daily_rain'] = float(ts.max().values)
except Exception as e:
print(f"Error calculating stats for {city_name}: {e}")
results[city_name] = city_data
# Save to frontend data directory
out_dir = os.path.join(os.path.dirname(__file__), '..', 'frontend', 'src', 'data')
os.makedirs(out_dir, exist_ok=True)
out_file = os.path.join(out_dir, 'imd_historical_baseline.json')
with open(out_file, 'w') as f:
json.dump(results, f, indent=2)
print(f"Successfully saved IMD Historical Baseline to {out_file}")
if __name__ == "__main__":
fetch_and_process()