Spaces:
Build error
Build error
Download app.py from Esmaeilkiani/Croplogginganalysis: direct link, hf CLI and curl.
- Browser
- Download file 4.68 kB
-
https://huggingface.co/spaces/Esmaeilkiani/Croplogginganalysis/resolve/82c1a87e0cbbdceb5760a368c0ffda1d5e2cea6b/app.py
- Command line
-
hf download hf://spaces/Esmaeilkiani/Croplogginganalysis@82c1a87e0cbbdceb5760a368c0ffda1d5e2cea6b/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Esmaeilkiani/Croplogginganalysis/resolve/82c1a87e0cbbdceb5760a368c0ffda1d5e2cea6b/app.py
4.68 kB
| import streamlit as st | |
| import pandas as pd | |
| import folium | |
| from streamlit_folium import st_folium | |
| import ee | |
| import geemap.foliumap as geemap | |
| # احراز هویت GEE با فایل json | |
| SERVICE_ACCOUNT = 'dehkhodamap-e9f0da4ce9f6514021@ee-esmaeilkiani13877.iam.gserviceaccount.com' | |
| KEY_PATH = 'ee-esmaeilkiani13877-cfdea6eaf411 (3).json' | |
| ee.Initialize(ee.ServiceAccountCredentials(SERVICE_ACCOUNT, KEY_PATH)) | |
| st.set_page_config(page_title="داشبورد مزارع نماینده", layout="wide") | |
| st.title("📡 داشبورد پایش مزارع نماینده نیشکر دهخدا") | |
| # خواندن فایلها | |
| df_links = pd.read_csv("مزارع نماینده راتون.csv", encoding='utf-8-sig') | |
| df_coords = pd.read_csv("مختصات و مشخصات کامل مزارع (4).csv", encoding='utf-8-sig') | |
| df_links.columns = df_links.columns.str.strip() | |
| df_coords.columns = df_coords.columns.str.strip() | |
| df_coords = df_coords.dropna(subset=["طول جغرافیایی", "عرض جغرافیایی"]) | |
| # انتخاب مزرعه نماینده | |
| representatives = df_links["مزرعه نماینده"].dropna().unique() | |
| selected_rep = st.selectbox("🔍 انتخاب مزرعه نماینده:", sorted(representatives), index=0) | |
| if selected_rep: | |
| subset_df = df_links[df_links["مزرعه نماینده"] == selected_rep] | |
| sub_farms = subset_df["زیر مجموعه"].dropna().tolist() | |
| rep_coords = df_coords[df_coords["مزرعه"] == selected_rep] | |
| if not rep_coords.empty: | |
| rep_lat = rep_coords["عرض جغرافیایی"].values[0] | |
| rep_lon = rep_coords["طول جغرافیایی"].values[0] | |
| m = folium.Map( | |
| location=[rep_lat, rep_lon], | |
| zoom_start=14, | |
| tiles="https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}", | |
| attr="Google Satellite" | |
| ) | |
| folium.Marker( | |
| location=[rep_lat, rep_lon], | |
| tooltip=f"🌟 مزرعه نماینده: {selected_rep}", | |
| icon=folium.Icon(color='blue', icon='star') | |
| ).add_to(m) | |
| # نمایش زیرمزارعهها روی نقشه | |
| for i, row in subset_df.iterrows(): | |
| farm = row["زیر مجموعه"] | |
| coords = df_coords[df_coords["مزرعه"] == farm] | |
| if not coords.empty: | |
| lat = coords["عرض جغرافیایی"].values[0] | |
| lon = coords["طول جغرافیایی"].values[0] | |
| folium.CircleMarker( | |
| location=[lat, lon], | |
| radius=8, | |
| color="red", | |
| fill=True, | |
| fill_color="yellow", | |
| fill_opacity=0.8, | |
| tooltip=f"{farm} - سن: {row['سن']}، واریته: {row['واریته']}" | |
| ).add_to(m) | |
| st_folium(m, width=1000, height=600) | |
| # نمایش جدول اطلاعات زیرمزارعهها | |
| st.subheader("📋 اطلاعات زیرمزارعهها") | |
| st.dataframe(subset_df[["زیر مجموعه", "سن", "واریته", "تهیه قلمه", "مساحت کلی"]]) | |
| # نمودار NDVI برای هر زیرمزرعه | |
| st.subheader("📈 نمودار سری زمانی NDVI (S2)") | |
| for farm in sub_farms: | |
| coords = df_coords[df_coords["مزرعه"] == farm] | |
| if not coords.empty: | |
| lat = coords["عرض جغرافیایی"].values[0] | |
| lon = coords["طول جغرافیایی"].values[0] | |
| point = ee.Geometry.Point(float(lon), float(lat)) | |
| collection = ee.ImageCollection('COPERNICUS/S2_SR') \ | |
| .filterBounds(point) \ | |
| .filterDate('2024-01-01', '2024-12-31') \ | |
| .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20)) \ | |
| .map(lambda img: img.addBands(img.normalizedDifference(['B8', 'B4']).rename('NDVI'))) | |
| ndvi_ts = collection.select('NDVI').getRegion(point, 30).getInfo() | |
| if len(ndvi_ts) > 1: | |
| df_ndvi = pd.DataFrame(ndvi_ts[1:], columns=ndvi_ts[0]) | |
| df_ndvi["datetime"] = pd.to_datetime(df_ndvi["time"], unit='ms') | |
| df_ndvi = df_ndvi[["datetime", "NDVI"]].dropna() | |
| st.line_chart(df_ndvi.set_index("datetime")["NDVI"], height=200, use_container_width=True) | |
| st.markdown(f"📍 **{farm}**") | |
| else: | |
| st.warning(f"📍 دادهای برای NDVI مزرعه {farm} پیدا نشد.") | |
| else: | |
| st.warning("مختصات مزرعه نماینده یافت نشد.") | |