Spaces:
Running
Running
File size: 5,553 Bytes
5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 5882ae2 33af4fe 54d9563 33af4fe |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
import streamlit as st
import ee
import geemap.foliumap as geemap
import pandas as pd
import datetime
import matplotlib.pyplot as plt
import geopandas as gpd
import zipfile
import os
import requests
# اعتبار سنجی و اتصال به Google 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)
# خواندن فایل CSV مزارع
farms_data = pd.read_csv('Farm_Details_Export.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]]]
)
# تابع برای دانلود و استخراج شیپفایل
def download_and_extract_shapefile(zip_url, extract_to='.'):
zip_path = os.path.join(extract_to, 'shapefile.zip')
# دانلود فایل زیپ
with requests.get(zip_url, stream=True) as r:
r.raise_for_status()
with open(zip_path, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
# استخراج فایل زیپ
with zipfile.ZipFile(zip_path, 'r') as zip_ref:
zip_ref.extractall(extract_to)
# یافتن فایل .shp
for file in os.listdir(extract_to):
if file.endswith('.shp'):
return os.path.join(extract_to, file)
return None
# تابع برای خواندن و نمایش شیپفایل
def load_and_display_shapefile(shapefile_path):
gdf = gpd.read_file(shapefile_path)
geojson = gdf.to_json()
map_ = geemap.Map(center=[31.5, 48.7], zoom=10)
map_.add_geojson(geojson, layer_name="Shapefile Layer")
map_.to_streamlit(height=600)
# آدرس شیپفایل آپلود شده در هاگینگ فیس (لینک مستقیم فایل زیپ)
zip_url = 'https://huggingface.co./spaces/Esmaeilkiani/AppSugarcane/resolve/main/Dehkhodaa.rar'
# دانلود و نمایش شیپفایل
shapefile_path = download_and_extract_shapefile(zip_url)
if shapefile_path:
st.write("شیپفایل با موفقیت بارگذاری شد!")
load_and_display_shapefile(shapefile_path)
else:
st.write("خطا در بارگذاری شیپفایل.")
# انتخاب بازه زمانی با کلیدهای یکتا
start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1), key="start_date")
end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31), key="end_date")
# انتخاب شاخص
index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI", "NDRE"])
# انتخاب مزرعه از فایل 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())
elif index_option == "NDMI":
index_map, vis_params = get_ndmi_map(start_date.isoformat(), end_date.isoformat())
else:
index_map, vis_params = get_ndre_map(start_date.isoformat(), end_date.isoformat())
# ایجاد نقشه با Geemap
map_ = geemap.Map(center=[latitude, longitude], zoom=14)
map_.addLayer(index_map.clip(region), vis_params, index_option)
map_.add_colorbar(vis_params, label=index_option)
# افزودن مزرعه به نقشه
map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}<br>سن: {farm_age}<br>واریته: {farm_variety}")
map_.add_ee_layer(region, {'color': 'FF0000'}, 'منطقه مورد مطالعه')
# نمایش نقشه در Streamlit
map_.to_streamlit(height=600)
# محاسبه NDRE میانگین
ndre_image = get_ndre_map(start_date.isoformat(), end_date.isoformat())[0]
mean_ndre = ndre_image.reduceRegion(reducer=ee.Reducer.mean(), geometry=region, scale=30).get('NDRE').getInfo()
# نمودار تصمیمگیری برای برداشت
fig, ax = plt.subplots()
ax.bar(['NDRE', 'مناسب برای برداشت'], [mean_ndre, 0.5], color=['green', 'orange'])
ax.set_ylim(0, 1)
ax.set_title(f"شاخص NDRE برای مزرعه {farm_name}")
st.pyplot(fig)
# نمایش وضعیت برداشت
if mean_ndre > 0.5:
st.write(f"مزرعه {farm_name} به حد قابل قبول برای برداشت رسیده است (NDRE = {mean_ndre:.2f}).")
else:
st.write(f"مزرعه {farm_name} هنوز آماده برداشت نیست (NDRE = {mean_ndre:.2f}).")
|