Esmaeilkianii commited on
Commit
e2b7f07
1 Parent(s): a101db1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +31 -59
app.py CHANGED
@@ -1,79 +1,51 @@
1
  import streamlit as st
2
  import requests
3
- import ee
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
- OPENWEATHER_URL = "https://api.openweathermap.org/data/2.5/weather"
17
 
18
- # تابع برای دریافت داده‌های هواشناسی
19
- def get_weather(lat, lon):
20
  params = {
21
  "lat": lat,
22
  "lon": lon,
23
- "appid": OPENWEATHER_API_KEY,
24
  "units": "metric",
25
  "lang": "fa"
26
  }
27
- response = requests.get(OPENWEATHER_URL, params=params)
28
  return response.json() if response.status_code == 200 else None
29
 
30
- # تابع برای محاسبه NDVI با Google Earth Engine
31
- def calculate_ndvi(lat, lon):
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
- use_default = st.sidebar.checkbox("استفاده از مختصات پیش‌فرض (دهخدا)", value=True)
51
- if use_default:
52
- lat, lon = LATITUDE, LONGITUDE
53
- else:
54
- lat = st.sidebar.number_input("عرض جغرافیایی", value=LATITUDE)
55
- lon = st.sidebar.number_input("طول جغرافیایی", value=LONGITUDE)
56
-
57
- # نمایش داده‌ها
58
- st.header(f"مختصات انتخابی: {lat}, {lon}")
59
-
60
- # دریافت و نمایش وضعیت هوا
61
- weather_data = get_weather(lat, lon)
62
- if weather_data:
63
- st.subheader("وضعیت آب‌وهوا:")
64
- st.write(f"🌡️ دما: {weather_data['main']['temp']}°C")
65
- st.write(f"🌥️ وضعیت: {weather_data['weather'][0]['description']}")
66
- st.write(f"💨 سرعت باد: {weather_data['wind']['speed']} متر بر ثانیه")
67
- else:
68
- st.error("خطا در دریافت داده‌های هواشناسی!")
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.write("اطلاعات NDVI در دسترس نیست.")
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("خطا در دریافت داده‌های پیش‌بینی هوا!")