File size: 3,239 Bytes
3d2eccf
1e831d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d2eccf
1e831d3
 
 
3d2eccf
1e831d3
 
 
 
3d2eccf
1e831d3
3d2eccf
1e831d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3d2eccf
1e831d3
3d2eccf
 
1e831d3
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
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 = '[email protected]'
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()