import streamlit as st import geemap import pandas as pd import ee import folium from streamlit_folium import st_folium # تنظیمات احراز هویت Google Earth Engine service_account = 'ee-esmaeilkiani1387@xxxxxxxxxx.iam.gserviceaccount.com' credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json') ee.Initialize(credentials) # تابع برای دریافت NDVI یا NDMI از Sentinel-2 def get_ndvi_ndmi_map(lat, lon, index='NDVI'): # محدوده منطقه مورد نظر point = ee.Geometry.Point([lon, lat]) area = point.buffer(5000) # بافر به شعاع 5 کیلومتر # لایه Sentinel-2 collection = ee.ImageCollection('COPERNICUS/S2').filterBounds(area).filterDate('2023-01-01', '2023-12-31').sort('CLOUDY_PIXEL_PERCENTAGE').first() # شاخص NDVI یا NDMI if index == 'NDVI': ndvi = collection.normalizedDifference(['B8', 'B4']).rename('NDVI') vis_params = {'min': 0, 'max': 1, 'palette': ['blue', 'white', 'green']} else: ndmi = collection.normalizedDifference(['B8', 'B11']).rename('NDMI') vis_params = {'min': -1, 'max': 1, 'palette': ['brown', 'white', 'blue']} # نقشه ایجاد کنید m = geemap.Map(center=[lat, lon], zoom=13) if index == 'NDVI': m.addLayer(ndvi, vis_params, 'NDVI') else: m.addLayer(ndmi, vis_params, 'NDMI') return m # بارگذاری اطلاعات مزرعه از CSV def load_farm_data(csv_url): df = pd.read_csv(csv_url) return df # برنامه اصلی def main(): st.title("نمایش نقشه شاخص NDVI یا NDMI با Sentinel-2") # دریافت نام مزرعه از کاربر st.sidebar.header("ورودی کاربر") farm_name = st.sidebar.text_input("نام مزرعه را وارد کنید:") # انتخاب شاخص index_option = st.sidebar.selectbox("شاخص مورد نظر:", ['NDVI', 'NDMI']) # بارگذاری داده‌های مزارع csv_url = 'https://huggingface.co./spaces/Esmaeilkianii/Drghezzi/raw/main/Farm_Details_Export.csv' farm_data = load_farm_data(csv_url) # پیدا کردن اطلاعات مزرعه بر اساس نام if farm_name: selected_farm = farm_data[farm_data['Farm'] == farm_name] if not selected_farm.empty: lat = selected_farm['Latitude'].values[0] lon = selected_farm['Longitude'].values[0] age = selected_farm['Age'].values[0] variety = selected_farm['Variety'].values[0] # نمایش اطلاعات مزرعه st.write(f"مزرعه: {farm_name}, سن: {age} سال، واریته: {variety}") # دریافت و نمایش نقشه با شاخص انتخابی st.write(f"نقشه شاخص {index_option} برای مزرعه {farm_name}:") map_ndvi_ndmi = get_ndvi_ndmi_map(lat, lon, index=index_option) st_folium(map_ndvi_ndmi, width=700, height=500) else: st.write("مزرعه مورد نظر یافت نشد.") else: st.write("لطفاً نام مزرعه را وارد کنید.") if __name__ == "__main__": main()