Spaces:
Runtime error
Runtime error
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 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|