File size: 3,606 Bytes
a269448
1ec7272
2bfae12
 
81fc5b0
a269448
2bfae12
a269448
 
1ec7272
a269448
2bfae12
 
 
8451644
 
 
 
 
 
 
 
 
 
 
 
2bfae12
8451644
 
 
83cb3e7
2bfae12
8451644
a588cf3
2bfae12
 
 
1ec7272
2bfae12
1158716
857cf4a
2bfae12
 
1ec7272
8451644
2bfae12
 
 
1ec7272
2bfae12
 
8451644
 
 
 
 
 
81fc5b0
2bfae12
 
8451644
81fc5b0
2bfae12
 
81fc5b0
8451644
 
81fc5b0
2bfae12
 
1ec7272
8451644
 
 
 
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
import streamlit as st
import ee
import geemap.foliumap as geemap
import pandas as pd
import datetime

# اعتبار سنجی و اتصال به 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]]])

# تابع برای دریافت تصویر NDVI
def get_ndvi_image(start_date, end_date):
    s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
    ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
    ndvi_params = {'min': -0.2, 'max': 0.8, 'palette': ['#0000FF', '#8A2BE2', '#FFFF00', '#00FF00', '#008000', '#006400']}
    return ndvi, ndvi_params

# ساخت برنامه Streamlit
st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")

# انتخاب بازه زمانی
start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))

# انتخاب شاخص
index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])

# انتخاب مزرعه از فایل 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]

# دکمه برای نمایش نقشه
if st.button("نمایش نقشه"):
    # بسته به شاخص انتخاب شده، نقشه را بارگذاری کنید
    if index_option == "NDVI":
        index_image, vis_params = get_ndvi_image(start_date.isoformat(), end_date.isoformat())
    else:
        st.error("شاخص انتخاب‌شده پشتیبانی نمی‌شود")
        st.stop()

    # ایجاد نقشه با Geemap
    map_ = geemap.Map(center=[latitude, longitude], zoom=12)
    map_.addLayer(index_image, vis_params, index_option)

    # افزودن نوار رنگ به نقشه
    map_.add_colorbar(vis_params, label=index_option)

    # افزودن مزرعه به نقشه
    map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}")

    # نمایش نقشه در Streamlit
    map_.to_streamlit()

    # ایجاد لینک دانلود تصویر
    image_url = index_image.getThumbURL(vis_params)
    st.markdown(f"[دانلود نقشه با کیفیت بالا]({image_url})")