import streamlit as st import ee import pandas as pd from datetime import date from google.oauth2 import service_account import geemap # Authenticate Earth Engine service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com' credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json') ee.Initialize(credentials) @st.cache_data def get_farm_coordinates(farm_name, dataset_url): # بارگذاری دیتاست df = pd.read_csv(dataset_url) # جستجوی مزرعه farm_data = df[df['Farm'] == farm_name] if farm_data.empty: return None return farm_data[['latitude', 'longitude']].values[0] # تابع برای محاسبه شاخص NDVI در بازه زمانی مشخص def get_ndvi_map(latitude, longitude, start_date, end_date): point = ee.Geometry.Point([longitude, latitude]) collection = (ee.ImageCollection("COPERNICUS/S2") .filterBounds(point) .filterDate(start_date, end_date) .map(lambda img: img.normalizedDifference(['B8', 'B4']).rename('NDVI'))) ndvi_image = collection.median() vis_params = {'min': 0, 'max': 1, 'palette': ['blue', 'white', 'green']} return geemap.ee_to_url(ndvi_image.clip(point.buffer(10000)), vis_params) # رابط کاربری با Streamlit st.title("نمایش نقشه شاخص NDVI مزارع نیشکر") farm_name = st.text_input("نام مزرعه را وارد کنید:") dataset_url = "https://huggingface.co/datasets/Esmaeilkianii/SugarcaneDataSet/embed/viewer/default/train" if farm_name: coords = get_farm_coordinates(farm_name, dataset_url) if coords is not None: st.success(f"مزرعه یافت شد! مختصات: {coords}") start_date = st.date_input("تاریخ شروع:", date(2023, 1, 1)) end_date = st.date_input("تاریخ پایان:", date.today()) if start_date < end_date: map_url = get_ndvi_map(coords[0], coords[1], start_date.isoformat(), end_date.isoformat()) st.image(map_url, caption=f"نقشه NDVI برای مزرعه {farm_name}") else: st.error("تاریخ شروع باید قبل از تاریخ پایان باشد.") else: st.error("مزرعه‌ای با این نام یافت نشد.")