AppSugarcane / app.py
Esmaeilkianii's picture
Update app.py
b4b5fed verified
raw
history blame
4.56 kB
import streamlit as st
import ee
import geemap.foliumap as geemap
import pandas as pd
import datetime
# اعتبار سنجی و اتصال به Google Earth Engine
service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com'
credentials = ee.ServiceAccountCredentials(service_account, 'path-to-your-private-key.json')
ee.Initialize(credentials)
# خواندن فایل CSV مزارع
farms_data = pd.read_csv('path-to-your-farms-data.csv')
# تعریف ناحیه مورد مطالعه با مختصات جدید
region = ee.Geometry.Polygon(
[[[48.681879, 31.417603], [48.721447, 31.413209], [48.724279, 31.420826], [48.726768, 31.427418],
[48.728228, 31.435694], [48.736382, 31.42837], [48.739557, 31.435657], [48.742261, 31.441772],
[48.752303, 31.452243], [48.75226, 31.459784], [48.759127, 31.473657], [48.766809, 31.472413],
[48.773203, 31.491188], [48.77758, 31.534579], [48.785563, 31.540797], [48.792601, 31.59696],
[48.694668, 31.60756], [48.691921, 31.603466], [48.697586, 31.534067], [48.69381, 31.507727],
[48.685226, 31.468496], [48.681879, 31.417603]]]
)
# تابع برای دریافت نقشه NDVI
def get_ndvi_map(start_date, end_date):
s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
ndvi_params = {'min': 0, 'max': 1, 'palette': ['red', 'yellow', 'green']}
return ndvi, ndvi_params
# تابع برای دریافت نقشه NDMI (شاخص رطوبت)
def get_ndmi_map(start_date, end_date):
s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
ndmi = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
ndmi_params = {'min': -1, 'max': 1, 'palette': ['brown', 'white', 'blue']}
return ndmi, ndmi_params
# ساخت برنامه Streamlit
st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")
# انتخاب بازه زمانی
start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
# انتخاب شاخص
index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])
# انتخاب مزرعه از فایل CSV
farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
# پیدا کردن مختصات مزرعه انتخاب شده
selected_farm = farms_data[farms_data['farm_name'] == farm_name]
latitude = selected_farm['latitude'].values[0]
longitude = selected_farm['longitude'].values[0]
farm_age = selected_farm['age'].values[0]
farm_variety = selected_farm['variety'].values[0]
# دکمه برای نمایش نقشه
if st.button("نمایش نقشه"):
# بسته به شاخص انتخاب شده، نقشه را بارگذاری کنید
if index_option == "NDVI":
index_map, vis_params = get_ndvi_map(start_date.isoformat(), end_date.isoformat())
else:
index_map, vis_params = get_ndmi_map(start_date.isoformat(), end_date.isoformat())
# ایجاد نقشه با Geemap
map_ = geemap.Map(center=[latitude, longitude], zoom=12)
map_.addLayer(index_map, vis_params, index_option)
# افزودن نوار رنگ به نقشه
map_.add_colorbar(vis_params, label=index_option)
# افزودن مزرعه به نقشه
map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}\nسن: {farm_age}\nواریته: {farm_variety}")
# نمایش نقشه در Streamlit
map_.to_streamlit()
# امکان دانلود نقشه
st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
user_input = pd.DataFrame({
'Age': [farm_age],
'Variety': [farm_variety],
'NDRE': [ndre_value]
})
if start_date:
day_of_year = start_date.timetuple().tm_yday
month = start_date.month
user_input['DayOfYear'] = [day_of_year]
user_input['Month'] = [month]
user_input = user_input[['Age', 'DayOfYear', 'Month', 'Variety', 'NDRE']]
prediction = model.predict(user_input)
st.write("Predictions:")
st.write(f"Brix: {prediction[0][0]}")
st.write(f"Pol: {prediction[0][1]}")
st.write(f"Purity: {prediction[0][2]}")
st.write(f"RS: {prediction[0][3]}")