Esmaeilkiani commited on
Commit
8451644
·
verified ·
1 Parent(s): 83cb3e7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -69
app.py CHANGED
@@ -12,54 +12,25 @@ ee.Initialize(credentials)
12
  # خواندن فایل CSV مزارع
13
  farms_data = pd.read_csv('Farm_Details_Export.csv')
14
 
15
- # تعریف ناحیه مورد مطالعه با مختصات جدید
16
- region = ee.Geometry.Polygon(
17
- [[[48.681879, 31.417603], [48.721447, 31.413209], [48.724279, 31.420826], [48.726768, 31.427418],
18
- [48.728228, 31.435694], [48.736382, 31.42837], [48.739557, 31.435657], [48.742261, 31.441772],
19
- [48.752303, 31.452243], [48.75226, 31.459784], [48.759127, 31.473657], [48.766809, 31.472413],
20
- [48.773203, 31.491188], [48.77758, 31.534579], [48.785563, 31.540797], [48.792601, 31.59696],
21
- [48.694668, 31.60756], [48.691921, 31.603466], [48.697586, 31.534067], [48.69381, 31.507727],
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
- # توابع برای هر شاخص
38
- def get_index_map(index, start_date, end_date):
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(['u_component_of_wind_10m', 'v_component_of_wind_10m']).filterDate('2023-01-01', '2023-12-31').mean()
52
- u10 = era5.select('u_component_of_wind_10m').reduceRegion(ee.Reducer.mean(), region, scale=1000).getInfo()
53
- v10 = era5.select('v_component_of_wind_10m').reduceRegion(ee.Reducer.mean(), region, scale=1000).getInfo()
54
-
55
- # محاسبه سرعت و جهت باد
56
- wind_speed = (u10['u_component_of_wind_10m'] ** 2 + v10['v_component_of_wind_10m'] ** 2) ** 0.5
57
- wind_direction = (180 / 3.14159) * ee.Number(ee.Image(u10['u_component_of_wind_10m']).atan2(ee.Image(v10['v_component_of_wind_10m']))).getInfo()
58
- return wind_speed, wind_direction
59
-
60
 
61
  # ساخت برنامه Streamlit
62
- st.title("نقشه شاخص‌های کشاورزی برای مزارع شرکت دهخدا")
63
 
64
  # انتخاب بازه زمانی
65
  start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
@@ -71,44 +42,34 @@ index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید
71
  # انتخاب مزرعه از فایل CSV
72
  farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
73
 
74
- # پیدا کردن مختصات و اطلاعات مزرعه انتخاب شده
75
  selected_farm = farms_data[farms_data['farm_name'] == farm_name]
76
  latitude = selected_farm['latitude'].values[0]
77
  longitude = selected_farm['longitude'].values[0]
78
- farm_age = selected_farm['age'].values[0]
79
- farm_variety = selected_farm['variety'].values[0]
80
 
81
  # دکمه برای نمایش نقشه
82
  if st.button("نمایش نقشه"):
83
- # بارگذاری نقشه شاخص
84
- index_map, vis_params = get_index_map(index_option, start_date.isoformat(), end_date.isoformat())
 
 
 
 
85
 
86
  # ایجاد نقشه با Geemap
87
  map_ = geemap.Map(center=[latitude, longitude], zoom=12)
88
- map_.addLayer(index_map, vis_params, index_option)
89
 
90
  # افزودن نوار رنگ به نقشه
91
  map_.add_colorbar(vis_params, label=index_option)
92
 
93
- # افزودن نشان مزرعه به نقشه
94
- map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}\nسن: {farm_age}\nواریته: {farm_variety}")
95
 
96
  # نمایش نقشه در Streamlit
97
  map_.to_streamlit()
98
 
99
- # امکان دانلود نقشه
100
- st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
101
-
102
- # نمایش سرعت و جهت باد در پنل کناری
103
- st.sidebar.header("اطلاعات باد")
104
- wind_speed, wind_direction = get_wind_data()
105
- st.sidebar.write(f"سرعت باد: {wind_speed:.2f} متر بر ثانیه")
106
- st.sidebar.write(f"جهت باد: {wind_direction:.2f} درجه")
107
-
108
- # نمایش قطب‌نما برای جهت باد
109
- compass_html = f"""
110
- <div style='width: 100px; height: 100px; border-radius: 50%; background: conic-gradient(red {wind_direction}deg, lightgray 0);'>
111
- <div style='transform: rotate({wind_direction}deg); color: white; font-size: 20px; text-align: center; position: relative; top: 35px; font-weight: bold;'>⬆</div>
112
- </div>
113
- """
114
- st.sidebar.markdown(compass_html, unsafe_allow_html=True)
 
12
  # خواندن فایل CSV مزارع
13
  farms_data = pd.read_csv('Farm_Details_Export.csv')
14
 
15
+ # تعریف ناحیه مورد مطالعه
16
+ region = ee.Geometry.Polygon([[[48.681879, 31.417603], [48.721447, 31.413209], [48.724279, 31.420826],
17
+ [48.726768, 31.427418], [48.728228, 31.435694], [48.736382, 31.42837],
18
+ [48.739557, 31.435657], [48.742261, 31.441772], [48.752303, 31.452243],
19
+ [48.75226, 31.459784], [48.759127, 31.473657], [48.766809, 31.472413],
20
+ [48.773203, 31.491188], [48.77758, 31.534579], [48.785563, 31.540797],
21
+ [48.792601, 31.59696], [48.694668, 31.60756], [48.691921, 31.603466],
22
+ [48.697586, 31.534067], [48.69381, 31.507727], [48.685226, 31.468496],
23
+ [48.681879, 31.417603]]])
24
+
25
+ # تابع برای دریافت تصویر NDVI
26
+ def get_ndvi_image(start_date, end_date):
 
 
 
 
 
 
 
 
 
 
 
 
27
  s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
28
+ ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
29
+ ndvi_params = {'min': -0.2, 'max': 0.8, 'palette': ['#0000FF', '#8A2BE2', '#FFFF00', '#00FF00', '#008000', '#006400']}
30
+ return ndvi, ndvi_params
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
 
32
  # ساخت برنامه Streamlit
33
+ st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")
34
 
35
  # انتخاب بازه زمانی
36
  start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
 
42
  # انتخاب مزرعه از فایل CSV
43
  farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
44
 
45
+ # پیدا کردن مختصات مزرعه انتخاب شده
46
  selected_farm = farms_data[farms_data['farm_name'] == farm_name]
47
  latitude = selected_farm['latitude'].values[0]
48
  longitude = selected_farm['longitude'].values[0]
 
 
49
 
50
  # دکمه برای نمایش نقشه
51
  if st.button("نمایش نقشه"):
52
+ # بسته به شاخص انتخاب ش��ه، نقشه را بارگذاری کنید
53
+ if index_option == "NDVI":
54
+ index_image, vis_params = get_ndvi_image(start_date.isoformat(), end_date.isoformat())
55
+ else:
56
+ st.error("شاخص انتخاب‌شده پشتیبانی نمی‌شود")
57
+ st.stop()
58
 
59
  # ایجاد نقشه با Geemap
60
  map_ = geemap.Map(center=[latitude, longitude], zoom=12)
61
+ map_.addLayer(index_image, vis_params, index_option)
62
 
63
  # افزودن نوار رنگ به نقشه
64
  map_.add_colorbar(vis_params, label=index_option)
65
 
66
+ # افزودن مزرعه به نقشه
67
+ map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}")
68
 
69
  # نمایش نقشه در Streamlit
70
  map_.to_streamlit()
71
 
72
+ # ایجاد لینک دانلود تصویر
73
+ image_url = index_image.getThumbURL(vis_params)
74
+ st.markdown(f"[دانلود نقشه با کیفیت بالا]({image_url})")
75
+