Esmaeilkiani commited on
Commit
8bd7fcc
·
verified ·
1 Parent(s): 1e4dbd1

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +99 -99
app.py CHANGED
@@ -1,103 +1,103 @@
1
- import streamlit as st
2
- import ee
3
- import geemap.foliumap as geemap
4
- import pandas as pd
5
- import datetime
6
-
7
- # اعتبار سنجی و اتصال به Google Earth Engine
8
- service_account = 'earth-engine-service-account@ee-esmaeilkiani1387.iam.gserviceaccount.com'
9
- credentials = ee.ServiceAccountCredentials(service_account, 'ee-esmaeilkiani1387-1b2c5e812a1d.json')
10
- ee.Initialize(credentials)
11
-
12
- # خواندن فایل CSV مزارع
13
- farms_data = pd.read_csv('Farm_Details_Export.csv')
14
-
15
- # تعریف ناحیه مورد مطالعه با مختصات جدید
16
- region = ee.Geometry.Polygon(
17
- [[[48.681879, 31.417603], [48.721447, 31.413209], [48.724279, 31.420826], [48.726768, 31.427418],
18
- [48.728228, 31.435694], [48.736382, 31.42837], [48.739557, 31.435657], [48.742261, 31.441772],
19
- [48.752303, 31.452243], [48.75226, 31.459784], [48.759127, 31.473657], [48.766809, 31.472413],
20
- [48.773203, 31.491188], [48.77758, 31.534579], [48.785563, 31.540797], [48.792601, 31.59696],
21
- [48.694668, 31.60756], [48.691921, 31.603466], [48.697586, 31.534067], [48.69381, 31.507727],
22
- [48.685226, 31.468496], [48.681879, 31.417603]]]
23
- )
24
-
25
- # تابع برای دریافت نقشه NDVI
26
- def get_ndvi_map(start_date, end_date):
27
- s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
28
- ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
29
- ndvi_params = {'min': 0, 'max': 1, 'palette': ['red', 'yellow', 'green']}
30
- return ndvi, ndvi_params
31
-
32
- # تابع برای دریافت نقشه NDMI (شاخص رطوبت)
33
- def get_ndmi_map(start_date, end_date):
34
- s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
35
- ndmi = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
36
- ndmi_params = {'min': -1, 'max': 1, 'palette': ['brown', 'white', 'blue']}
37
- return ndmi, ndmi_params
38
-
39
- # ساخت برنامه Streamlit
40
- st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")
41
-
42
- # انتخاب بازه زمانی
43
- start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
44
- end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
45
-
46
- # انتخاب شاخص
47
- index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])
48
-
49
- # انتخاب مزرعه از فایل CSV
50
- farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
51
-
52
- # پیدا کردن مختصات مزرعه انتخاب شده
53
- selected_farm = farms_data[farms_data['farm_name'] == farm_name]
54
- latitude = selected_farm['latitude'].values[0]
55
- longitude = selected_farm['longitude'].values[0]
56
- farm_age = selected_farm['age'].values[0]
57
- farm_variety = selected_farm['variety'].values[0]
58
-
59
- # دکمه برای نمایش نقشه
60
- if st.button("نمایش نقشه"):
61
- # بسته به شاخص انتخاب شده، نقشه را بارگذاری کنید
62
- if index_option == "NDVI":
63
- index_map, vis_params = get_ndvi_map(start_date.isoformat(), end_date.isoformat())
64
- else:
65
- index_map, vis_params = get_ndmi_map(start_date.isoformat(), end_date.isoformat())
66
-
67
- # ایجاد نقشه با Geemap
68
- map_ = geemap.Map(center=[latitude, longitude], zoom=12)
69
- map_.addLayer(index_map, vis_params, index_option)
70
-
71
- # افزودن نوار رنگ به نقشه
72
- map_.add_colorbar(vis_params, label=index_option)
73
-
74
- # افزودن مزرعه به نقشه
75
- map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}\nسن: {farm_age}\nواریته: {farm_variety}")
76
-
77
- # نمایش نقشه در Streamlit
78
- map_.to_streamlit()
79
-
80
- # امکان دانلود نقشه
81
- st.download_button(label="دانلود نقشه", data=map_.to_image(), file_name="map.png", mime="image/png")
82
-
83
  user_input = pd.DataFrame({
84
  'Age': [farm_age],
85
  'Variety': [farm_variety],
86
- 'NDRE': [ndre_value]
87
- })
88
 
89
- if start_date:
90
- day_of_year = start_date.timetuple().tm_yday
91
- month = start_date.month
92
- user_input['DayOfYear'] = [day_of_year]
93
- user_input['Month'] = [month]
94
-
95
- user_input = user_input[['Age', 'DayOfYear', 'Month', 'Variety', 'NDRE']]
96
-
97
- prediction = model.predict(user_input)
98
-
99
- st.write("Predictions:")
100
- st.write(f"Brix: {prediction[0][0]}")
101
- st.write(f"Pol: {prediction[0][1]}")
102
- st.write(f"Purity: {prediction[0][2]}")
103
- st.write(f"RS: {prediction[0][3]}")
 
 
 
 
1
+ import streamlit as st
2
+ import datetime
3
+ import pandas as pd
4
+ import geemap
5
+ import ee # Ensure that Earth Engine is initialized
6
+ from sklearn.preprocessing import StandardScaler # Example import, adjust based on your model
7
+
8
+ try:
9
+ service_account = 'Esmaeil.kiani1387@gmail.com'
10
+ credentials_path = 'ee-esmaeilkiani1387-1b2c5e812a1d.json'
11
+ ee.Initialize(ee.ServiceAccountCredentials(service_account, credentials_path))
12
+ except Exception as e:
13
+ st.error(f"Error initializing Earth Engine: {e}")
14
+ st.stop() # Stop execution if authentication fails
15
+ #Load your farms data
16
+ Make sure to define `farms_data` DataFrame with columns ['farm_name', 'latitude', 'longitude', 'age', 'variety']
17
+ farms_data = pd.read_csv('Farm_Details_Export.csv')
18
+
19
+ # تابع برای دریافت نقشه NDVI
20
+ def get_ndvi_map(start_date, end_date):
21
+ s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
22
+ ndvi = s2.map(lambda image: image.normalizedDifference(['B8', 'B4']).rename('NDVI')).median()
23
+ ndvi_params = {'min': 0, 'max': 1, 'palette': ['red', 'yellow', 'green']}
24
+ return ndvi, ndvi_params
25
+
26
+ # تابع برای دریافت نقشه NDMI (شاخص رطوبت)
27
+ def get_ndmi_map(start_date, end_date):
28
+ s2 = ee.ImageCollection('COPERNICUS/S2').filterBounds(region).filterDate(start_date, end_date)
29
+ ndmi = s2.map(lambda image: image.normalizedDifference(['B8', 'B11']).rename('NDMI')).median()
30
+ ndmi_params = {'min': -1, 'max': 1, 'palette': ['brown', 'white', 'blue']}
31
+ return ndmi, ndmi_params
32
+
33
+ # ساخت برنامه Streamlit
34
+ st.title("نقشه NDVI و NDMI برای مزارع شرکت دهخدا")
35
+
36
+ # انتخاب بازه زمانی
37
+ start_date = st.date_input("تاریخ شروع", datetime.date(2023, 1, 1))
38
+ end_date = st.date_input("تاریخ پایان", datetime.date(2023, 12, 31))
39
+
40
+ # انتخاب شاخص
41
+ index_option = st.selectbox("شاخص مورد نظر را انتخاب کنید:", ["NDVI", "NDMI"])
42
+
43
+ # انتخاب مزرعه از فایل CSV
44
+ farm_name = st.sidebar.selectbox("نام مزرعه را انتخاب کنید:", farms_data['farm_name'].unique())
45
+
46
+ # پیدا کردن مختصات مزرعه انتخاب شده
47
+ selected_farm = farms_data[farms_data['farm_name'] == farm_name]
48
+ latitude = selected_farm['latitude'].values[0]
49
+ longitude = selected_farm['longitude'].values[0]
50
+ farm_age = selected_farm['age'].values[0]
51
+ farm_variety = selected_farm['variety'].values[0]
52
+
53
+ # دکمه برای نمایش نقشه
54
+ if st.button("نمایش نقشه"):
55
+ # بسته به شاخص انتخاب شده، نقشه را بارگذاری کنید
56
+ if index_option == "NDVI":
57
+ index_map, vis_params = get_ndvi_map(start_date.isoformat(), end_date.isoformat())
58
+ else:
59
+ index_map, vis_params = get_ndmi_map(start_date.isoformat(), end_date.isoformat())
60
+
61
+ # ایجاد نقشه با Geemap
62
+ map_ = geemap.Map(center=[latitude, longitude], zoom=12)
63
+ map_.addLayer(index_map, vis_params, index_option)
64
+
65
+ # افزودن نوار رنگ به نقشه
66
+ map_.add_colorbar(vis_params, label=index_option)
67
+
68
+ # افزودن مزرعه به نقشه
69
+ map_.add_marker([latitude, longitude], popup=f"نام: {farm_name}\nسن: {farm_age}\nواریته: {farm_variety}")
70
+
71
+ # نمایش نقشه در Streamlit
72
+ map_.to_streamlit()
73
+
74
+ # امکان دانلود نقشه (توجه: كد ایجاد تصویر ممکن است نیاز به بررسی داشته باشد)
75
+ map_image = map_.to_image() # Adjust if `to_image` doesn't exist or not functioning correctly
76
+ st.download_button(label="دانلود نقشه", data=map_image, file_name="map.png", mime="image/png")
77
+
78
+ # Preparation for the prediction model
79
+ # Ensure you have defined `model` and `ndre_value`, which are not included in the provided code
 
 
 
80
  user_input = pd.DataFrame({
81
  'Age': [farm_age],
82
  'Variety': [farm_variety],
83
+ 'NDRE': [None] # Assign ndre_value once computed if applicable
84
+ })
85
 
86
+ if start_date:
87
+ day_of_year = start_date.timetuple().tm_yday
88
+ month = start_date.month
89
+ user_input['DayOfYear'] = [day_of_year]
90
+ user_input['Month'] = [month]
91
+
92
+ user_input = user_input[['Age', 'DayOfYear', 'Month', 'Variety', 'NDRE']]
93
+
94
+ # Ensure that your model is properly defined and imported as necessary
95
+ if 'model' in locals():
96
+ prediction = model.predict(user_input)
97
+ st.write("Predictions:")
98
+ st.write(f"Brix: {prediction[0][0]}")
99
+ st.write(f"Pol: {prediction[0][1]}")
100
+ st.write(f"Purity: {prediction[0][2]}")
101
+ st.write(f"RS: {prediction[0][3]}")
102
+ else:
103
+ st.warning("مدل پیش‌بینی تعریف نشده است.")