Esmaeilkiani commited on
Commit
1158716
·
verified ·
1 Parent(s): 2bfae12

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +36 -16
app.py CHANGED
@@ -22,12 +22,16 @@ region = ee.Geometry.Polygon(
22
  [48.685226, 31.468496], [48.681879, 31.417603]]]
23
  )
24
 
25
- # تعریف پالت‌های رنگی برای هر شاخص
26
  palettes = {
27
- 'NDVI': ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301'],
28
- 'EVI': ['FFFFFF', 'CE7E45', 'DF923D', 'F1B555', 'FCD163', '99B718', '74A901', '66A000', '529400', '3E8601', '207401', '056201', '004C00', '023B01', '012E01', '011D01', '011301'],
29
- 'SAVI': ['#D73027', '#F46D43', '#FDAE61', '#FEE08B', '#FFFFBF', '#D9EF8B', '#A6D96A', '#66BD63', '#1A9850'],
30
- 'NDMI': ['#D73027', '#F46D43', '#FDAE61', '#FEE08B', '#FFFFBF', '#D9EF8B', '#A6D96A', '#66BD63', '#1A9850']
 
 
 
 
31
  }
32
 
33
  # توابع برای هر شاخص
@@ -35,20 +39,22 @@ def get_index_map(index, start_date, end_date):
35
  s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
36
  if index == "NDVI":
37
  image = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
38
- elif index == "EVI":
39
- image = s2.map(lambda image: image.expression('2.5 * ((B8 - B4) / (B8 + 6 * B4 - 7.5 * B2 + 1))', {
40
- 'B8': image.select('B8'), 'B4': image.select('B4'), 'B2': image.select('B2')
41
- }).rename('EVI')).median()
42
- elif index == "SAVI":
43
- image = s2.map(lambda image: image.expression('(1 + 0.5) * ((B8 - B4) / (B8 + B4 + 0.5))', {
44
- 'B8': image.select('B8'), 'B4': image.select('B4')
45
- }).rename('SAVI')).median()
46
  elif index == "NDMI":
47
  image = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
48
-
49
- vis_params = {'min': -1, 'max': 1, 'palette': palettes[index]}
50
  return image, vis_params
51
 
 
 
 
 
 
 
 
 
 
 
52
  # ساخت برنامه Streamlit
53
  st.title("نقشه شاخص‌های کشاورزی برای مزارع شرکت دهخدا")
54
 
@@ -57,7 +63,7 @@ start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
57
  end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
58
 
59
  # انتخاب شاخص
60
- index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "EVI", "SAVI", "NDMI"])
61
 
62
  # انتخاب مزرعه از فایل CSV
63
  farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
@@ -89,3 +95,17 @@ if st.button("نمایش نقشه"):
89
 
90
  # امکان دانلود نقشه
91
  st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  [48.685226, 31.468496], [48.681879, 31.417603]]]
23
  )
24
 
25
+ # تعریف پالت‌های رنگی برای شاخص‌ها
26
  palettes = {
27
+ 'NDVI': {
28
+ 'min': -0.2, 'max': 0.8,
29
+ 'palette': ['#0000FF', '#8A2BE2', '#FFFF00', '#00FF00', '#008000', '#006400']
30
+ },
31
+ 'NDMI': {
32
+ 'min': -0.1, 'max': 0.5,
33
+ 'palette': ['#FF0000', '#FFA500', '#FFFF00', '#008000', '#0000FF']
34
+ }
35
  }
36
 
37
  # توابع برای هر شاخص
 
39
  s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
40
  if index == "NDVI":
41
  image = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
42
+ vis_params = palettes['NDVI']
 
 
 
 
 
 
 
43
  elif index == "NDMI":
44
  image = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
45
+ vis_params = palettes['NDMI']
 
46
  return image, vis_params
47
 
48
+ # توابع برای دریافت داده‌های باد از Google Earth Engine
49
+ def get_wind_data():
50
+ # استفاده از مجموعه داده ERA5 برای دریافت سرعت و جهت باد
51
+ era5 = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').select(['u10', 'v10']).filterDate('2023-01-01', '2023-12-31').mean()
52
+ u10 = era5.select('u10').reduceRegion(ee.Reducer.mean(), region, scale=1000).getInfo()
53
+ v10 = era5.select('v10').reduceRegion(ee.Reducer.mean(), region, scale=1000).getInfo()
54
+ wind_speed = (u10['u10'] ** 2 + v10['v10'] ** 2) ** 0.5 # محاسبه سرعت باد
55
+ wind_direction = (180 / 3.14159) * ee.Number(ee.Image(u10['u10']).atan2(ee.Image(v10['v10']))).getInfo() # محاسبه جهت باد
56
+ return wind_speed, wind_direction
57
+
58
  # ساخت برنامه Streamlit
59
  st.title("نقشه شاخص‌های کشاورزی برای مزارع شرکت دهخدا")
60
 
 
63
  end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
64
 
65
  # انتخاب شاخص
66
+ index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])
67
 
68
  # انتخاب مزرعه از فایل CSV
69
  farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
 
95
 
96
  # امکان دانلود نقشه
97
  st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
98
+
99
+ # نمایش سرعت و جهت باد در پنل کناری
100
+ st.sidebar.header("اطلاعات باد")
101
+ wind_speed, wind_direction = get_wind_data()
102
+ st.sidebar.write(f"سرعت باد: {wind_speed:.2f} متر بر ثانیه")
103
+ st.sidebar.write(f"جهت باد: {wind_direction:.2f} درجه")
104
+
105
+ # نمایش قطب‌نما برای جهت باد
106
+ compass_html = f"""
107
+ <div style='width: 100px; height: 100px; border-radius: 50%; background: conic-gradient(red {wind_direction}deg, lightgray 0);'>
108
+ <div style='transform: rotate({wind_direction}deg); color: white; font-size: 20px; text-align: center; position: relative; top: 35px; font-weight: bold;'>⬆</div>
109
+ </div>
110
+ """
111
+ st.sidebar.markdown(compass_html, unsafe_allow_html=True)