Spaces:
Runtime error
Runtime error
Esmaeilkiani
commited on
Update app.py
Browse files
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 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
)
|
24 |
-
|
25 |
-
#
|
26 |
-
|
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 |
-
|
41 |
-
|
42 |
-
|
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 |
-
|
|
|
|
|
|
|
|
|
85 |
|
86 |
# ایجاد نقشه با Geemap
|
87 |
map_ = geemap.Map(center=[latitude, longitude], zoom=12)
|
88 |
-
map_.addLayer(
|
89 |
|
90 |
# افزودن نوار رنگ به نقشه
|
91 |
map_.add_colorbar(vis_params, label=index_option)
|
92 |
|
93 |
-
# افزودن
|
94 |
-
map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}
|
95 |
|
96 |
# نمایش نقشه در Streamlit
|
97 |
map_.to_streamlit()
|
98 |
|
99 |
-
#
|
100 |
-
|
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 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|