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)