import streamlit as st import datetime import pandas as pd import geemap import ee # Ensure that Earth Engine is initialized from sklearn.preprocessing import StandardScaler # Example import, adjust based on your model try: service_account = 'Esmaeil.kiani1387@gmail.com' credentials_path = 'ee-esmaeilkiani1387-1b2c5e812a1d.json' ee.Initialize(ee.ServiceAccountCredentials(service_account, credentials_path)) except Exception as e: st.error(f"Error initializing Earth Engine: {e}") st.stop() # Stop execution if authentication fails #Load your farms data Make sure to define `farms_data` DataFrame with columns ['farm_name', 'latitude', 'longitude', 'age', 'variety'] farms_data = pd.read_csv('Farm_Details_Export.csv') # تابع برای دریافت نقشه 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() # امکان دانلود نقشه (توجه: كد ایجاد تصویر ممکن است نیاز به بررسی داشته باشد) map_image = map_.to_image() # Adjust if `to_image` doesn't exist or not functioning correctly st.download_button(label="دانلود نقشه", data=map_image, file_name="map.png", mime="image/png") # Preparation for the prediction model # Ensure you have defined `model` and `ndre_value`, which are not included in the provided code user_input = pd.DataFrame({ 'Age': [farm_age], 'Variety': [farm_variety], 'NDRE': [None] # Assign ndre_value once computed if applicable }) 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']] # Ensure that your model is properly defined and imported as necessary if 'model' in locals(): 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]}") else: st.warning("مدل پیش‌بینی تعریف نشده است.")