Spaces:
Runtime error
Runtime error
Esmaeilkiani
commited on
Update app.py
Browse files
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':
|
28 |
-
|
29 |
-
|
30 |
-
|
|
|
|
|
|
|
|
|
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 |
-
|
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", "
|
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)
|