Spaces:
Running
Running
Esmaeilkianii
commited on
Commit
•
e2b7f07
1
Parent(s):
a101db1
Update app.py
Browse files
app.py
CHANGED
@@ -1,79 +1,51 @@
|
|
1 |
import streamlit as st
|
2 |
import requests
|
3 |
-
import
|
4 |
-
|
5 |
-
# تنظیمات اولیه Google Earth Engine
|
6 |
-
service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com'
|
7 |
-
credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json')
|
8 |
-
ee.Initialize(credentials)
|
9 |
|
10 |
# اطلاعات منطقه پیشفرض
|
11 |
LATITUDE = 31.534442
|
12 |
LONGITUDE = 48.724416
|
13 |
|
14 |
-
# کلید API
|
15 |
OPENWEATHER_API_KEY = "ed47316a45379e2221a75f813229fb46"
|
16 |
-
|
17 |
|
18 |
-
# تابع برای دریافت
|
19 |
-
def
|
20 |
params = {
|
21 |
"lat": lat,
|
22 |
"lon": lon,
|
23 |
-
"appid":
|
24 |
"units": "metric",
|
25 |
"lang": "fa"
|
26 |
}
|
27 |
-
response = requests.get(
|
28 |
return response.json() if response.status_code == 200 else None
|
29 |
|
30 |
-
#
|
31 |
-
|
32 |
-
point = ee.Geometry.Point([lon, lat])
|
33 |
-
s2 = ee.ImageCollection('COPERNICUS/S2') \
|
34 |
-
.filterBounds(point) \
|
35 |
-
.filterDate('2023-01-01', '2023-12-31') \
|
36 |
-
.median() # ترکیب تصاویر
|
37 |
-
ndvi = s2.normalizedDifference(['B8', 'B4']) # محاسبه NDVI
|
38 |
-
ndvi_value = ndvi.reduceRegion(
|
39 |
-
reducer=ee.Reducer.mean(),
|
40 |
-
geometry=point,
|
41 |
-
scale=30
|
42 |
-
).getInfo()
|
43 |
-
return ndvi_value.get('nd', 'بدون داده')
|
44 |
-
|
45 |
-
# رابط کاربری استریملیت
|
46 |
-
st.title("برنامه مدیریت آبوهوا و NDVI")
|
47 |
st.sidebar.title("تنظیمات")
|
48 |
|
49 |
-
#
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
# محاسبه و نمایش NDVI
|
71 |
-
ndvi_value = calculate_ndvi(lat, lon)
|
72 |
-
st.subheader("شاخص NDVI:")
|
73 |
-
if ndvi_value != 'بدون داده':
|
74 |
-
st.write(f"🌾 مقدار NDVI: {ndvi_value:.2f}")
|
75 |
else:
|
76 |
-
st.
|
77 |
-
|
78 |
-
# نقشه منطقه با استریملیت
|
79 |
-
st.map(data={"lat": [lat], "lon": [lon]}, zoom=12)
|
|
|
1 |
import streamlit as st
|
2 |
import requests
|
3 |
+
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
# اطلاعات منطقه پیشفرض
|
6 |
LATITUDE = 31.534442
|
7 |
LONGITUDE = 48.724416
|
8 |
|
9 |
+
# کلید API
|
10 |
OPENWEATHER_API_KEY = "ed47316a45379e2221a75f813229fb46"
|
11 |
+
OPENWEATHER_FORECAST_URL = "https://api.openweathermap.org/data/2.5/forecast"
|
12 |
|
13 |
+
# تابع برای دریافت پیشبینی هوا
|
14 |
+
def get_weather_forecast(lat, lon, api_key):
|
15 |
params = {
|
16 |
"lat": lat,
|
17 |
"lon": lon,
|
18 |
+
"appid": api_key,
|
19 |
"units": "metric",
|
20 |
"lang": "fa"
|
21 |
}
|
22 |
+
response = requests.get(OPENWEATHER_FORECAST_URL, params=params)
|
23 |
return response.json() if response.status_code == 200 else None
|
24 |
|
25 |
+
# رابط کاربری Streamlit
|
26 |
+
st.title("پیشبینی وضعیت هوا")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
st.sidebar.title("تنظیمات")
|
28 |
|
29 |
+
# نمایش مختصات پیشفرض
|
30 |
+
st.sidebar.write("مختصات پیشفرض: دهخدا")
|
31 |
+
lat, lon = LATITUDE, LONGITUDE
|
32 |
+
|
33 |
+
# دریافت دادههای پیشبینی
|
34 |
+
forecast_data = get_weather_forecast(lat, lon, OPENWEATHER_API_KEY)
|
35 |
+
|
36 |
+
if forecast_data:
|
37 |
+
st.subheader("پیشبینی وضعیت هوا برای 7 روز آینده")
|
38 |
+
for i, forecast in enumerate(forecast_data["list"][:7]):
|
39 |
+
# زمان و دما
|
40 |
+
dt = datetime.utcfromtimestamp(forecast["dt"]).strftime("%A, %d %B %Y")
|
41 |
+
temp = forecast["main"]["temp"]
|
42 |
+
description = forecast["weather"][0]["description"]
|
43 |
+
icon = forecast["weather"][0]["icon"]
|
44 |
+
|
45 |
+
# نمایش اطلاعات
|
46 |
+
st.write(f"### {dt}")
|
47 |
+
st.image(f"http://openweathermap.org/img/wn/{icon}.png", width=50)
|
48 |
+
st.write(f"🌡️ دما: {temp}°C")
|
49 |
+
st.write(f"🌥️ وضعیت: {description}")
|
|
|
|
|
|
|
|
|
|
|
50 |
else:
|
51 |
+
st.error("خطا در دریافت دادههای پیشبینی هوا!")
|
|
|
|
|
|