File size: 2,965 Bytes
5a3e1c9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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)