Обрабатываем карту в GeoJSON и выводим прогноз погоды
Автор
using HTTP, JSON, CSV, DataFrames
function get_meteo_data(target_date, target_hour, precision_deg)
# API endpoints
ELEVATION_URL = "https://api.open-meteo.com/v1/elevation"
WEATHER_URL = "https://api.open-meteo.com/v1/forecast"
# Сетка для России
lats = 26:precision_deg:87
lons = 14:precision_deg:190
# === ЭТАП 1: Собираем данные о рельефе ===
println("Собираем данные о рельефе...")
relief_data = []
for lat in lats, lon in lons
try
r = HTTP.get("$ELEVATION_URL?latitude=$lat&longitude=$lon")
j = JSON.parse(String(r.body))
elevation = j["elevation"][1]
surface = elevation > 0 ? "суша" : "море"
push!(relief_data, [lat, lon, elevation, surface])
catch
push!(relief_data, [lat, lon, "NA", "неизвестно"])
end
sleep(0.1)
end
# Сохраняем рельеф
df_relief = DataFrame(
широта=[d[1] for d in relief_data],
долгота=[d[2] for d in relief_data],
высота=[d[3] for d in relief_data],
тип_поверхности=[d[4] for d in relief_data]
)
CSV.write("рельеф_россия.csv", df_relief)
println("Рельеф сохранен в рельеф_россия.csv")
df_relief = DataFrame(CSV.File("рельеф_россия.csv"))
# === ЭТАП 2: Собираем данные о погоде ===
println("Собираем данные о погоде...")
weather_data = []
for lat in lats, lon in lons
try
# Погода на заданную дату
url = "$WEATHER_URL?latitude=$lat&longitude=$lon" *
"&hourly=temperature_2m,,relative_humidity_2m,wind_speed_10m,weathercode" *
"&start_date=$(Dates.format(target_date, "yyyy-mm-dd"))" *
"&end_date=$(Dates.format(target_date, "yyyy-mm-dd"))" *
"&timezone=Europe/Moscow"
r = HTTP.get(url)
j = JSON.parse(String(r.body))
# Берем данные за нужный час из hourly
hour_idx = target_hour + 1 # +1 потому что индексация с 1 в Julia
temp = j["hourly"]["temperature_2m"][hour_idx]
humidity = j["hourly"]["relative_humidity_2m"][hour_idx]
wind = j["hourly"]["wind_speed_10m"][hour_idx]
weathercode = j["hourly"]["weathercode"][hour_idx]
push!(weather_data, [
lat, lon,
round(temp, digits=1),
weathercode,
round(wind, digits=1),
humidity
])
catch e
push!(weather_data, [lat, lon, "NA", "NA", "NA", "NA"])
end
sleep(0.1)
end
# Сохраняем погоду
df_weather = DataFrame(
широта=[d[1] for d in weather_data],
долгота=[d[2] for d in weather_data],
температура=[d[3] for d in weather_data],
код_погоды=[d[4] for d in weather_data],
ветер=[d[5] for d in weather_data],
влажность=[d[6] for d in weather_data]
)
CSV.write("погода_россия.csv", df_weather)
println("Погода сохранена в погода_россия.csv")
# === ЭТАП 3: Объединяем данные ===
println("Объединяем данные...")
df_final = leftjoin(df_relief, df_weather, on=[:широта, :долгота])
CSV.write("погода_россия_полная.csv", df_final)
return df_final
end