Spaces:
No application file
No application file
import streamlit as st | |
import requests | |
import ee | |
# تنظیمات اولیه Google Earth Engine | |
service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com' | |
credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json') | |
ee.Initialize(credentials) | |
# اطلاعات منطقه پیشفرض | |
LATITUDE = 31.534442 | |
LONGITUDE = 48.724416 | |
# کلید API هواشناسی | |
OPENWEATHER_API_KEY = "ed47316a45379e2221a75f813229fb46" | |
OPENWEATHER_URL = "https://api.openweathermap.org/data/2.5/weather" | |
# تابع برای دریافت دادههای هواشناسی | |
def get_weather(lat, lon): | |
params = { | |
"lat": lat, | |
"lon": lon, | |
"appid": OPENWEATHER_API_KEY, | |
"units": "metric", | |
"lang": "fa" | |
} | |
response = requests.get(OPENWEATHER_URL, params=params) | |
return response.json() if response.status_code == 200 else None | |
# تابع برای محاسبه NDVI با Google Earth Engine | |
def calculate_ndvi(lat, lon): | |
point = ee.Geometry.Point([lon, lat]) | |
s2 = ee.ImageCollection('COPERNICUS/S2') \ | |
.filterBounds(point) \ | |
.filterDate('2023-01-01', '2023-12-31') \ | |
.median() # ترکیب تصاویر | |
ndvi = s2.normalizedDifference(['B8', 'B4']) # محاسبه NDVI | |
ndvi_value = ndvi.reduceRegion( | |
reducer=ee.Reducer.mean(), | |
geometry=point, | |
scale=30 | |
).getInfo() | |
return ndvi_value.get('nd', 'بدون داده') | |
# رابط کاربری استریملیت | |
st.title("برنامه مدیریت آبوهوا و NDVI") | |
st.sidebar.title("تنظیمات") | |
# انتخاب مختصات یا استفاده از پیشفرض | |
use_default = st.sidebar.checkbox("استفاده از مختصات پیشفرض (دهخدا)", value=True) | |
if use_default: | |
lat, lon = LATITUDE, LONGITUDE | |
else: | |
lat = st.sidebar.number_input("عرض جغرافیایی", value=LATITUDE) | |
lon = st.sidebar.number_input("طول جغرافیایی", value=LONGITUDE) | |
# نمایش دادهها | |
st.header(f"مختصات انتخابی: {lat}, {lon}") | |
# دریافت و نمایش وضعیت هوا | |
weather_data = get_weather(lat, lon) | |
if weather_data: | |
st.subheader("وضعیت آبوهوا:") | |
st.write(f"🌡️ دما: {weather_data['main']['temp']}°C") | |
st.write(f"🌥️ وضعیت: {weather_data['weather'][0]['description']}") | |
st.write(f"💨 سرعت باد: {weather_data['wind']['speed']} متر بر ثانیه") | |
else: | |
st.error("خطا در دریافت دادههای هواشناسی!") | |
# محاسبه و نمایش NDVI | |
ndvi_value = calculate_ndvi(lat, lon) | |
st.subheader("شاخص NDVI:") | |
if ndvi_value != 'بدون داده': | |
st.write(f"🌾 مقدار NDVI: {ndvi_value:.2f}") | |
else: | |
st.write("اطلاعات NDVI در دسترس نیست.") | |
# نقشه منطقه با استریملیت | |
st.map(data={"lat": [lat], "lon": [lon]}, zoom=12) | |