Esmaeilkiani commited on
Commit
d697c35
·
verified ·
1 Parent(s): 2178497

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +132 -86
app.py CHANGED
@@ -1,93 +1,139 @@
1
  import streamlit as st
2
- import ee
3
- import geemap.foliumap as geemap
4
- import folium
5
- from datetime import datetime, timedelta
 
 
6
 
7
- # تابع برای احراز هویت با استفاده از سرویس اکانت
8
- def authenticate_gee():
9
- credentials = ee.ServiceAccountCredentials(
10
- email='dehkhodamap-e9f0da4ce9f6514021@ee-esmaeilkiani13877.iam.gserviceaccount.com',
11
- key_data="""-----BEGIN PRIVATE KEY-----
12
- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCjeOvgKi+gWK6k
13
- 2/0RXOA3LAo51DVxA1ja9v0qFOn4FNOStxkwlKvcK8yDQNb53FPORHFIUHvev3y7
14
- iHr/UEUqnn5Rzjbf0k3qWB/fS377/UP4VznMsFpKiHNxCBtaNS8KLk6Rat6Y7Xfm
15
- JfpSU7ZjYZmVc81M/7iFofGUSJoHYpxhyt3rjp53huxJNNW5e12TFnLkyg1Ja/9X
16
- GMTt+vjVcO4XhQCIlaGVdSKS2sHlHgzpzE6KtuUKjDMEBqPkWF4xc16YavYltwPd
17
- qULCu2/t6dczhYL4NEFj8wL+KJqOojfsyoWmzqPFx1Bbxk4BVPk/lslq9+m9p5kq
18
- SCG0/9W9AgMBAAECggEAEGchw+x3uu8rFv+79PIMzXxtyj+w3RYo5E/EN2TB1VLB
19
- qAcXT/ibBgyfCMyIxamF/zx+4XKx+zfbnDWlodi8F/qvUiYO+4ZuqwUMras1orNX
20
- DqQx+If5h2EJtF3L4NFVVwAuggjnLREm5sEIzRn5Qx+X+ZcVEpTWPxJw2yAt1G+3
21
- k311KqD+zR7jQfchXU4xQQ1ZoHkdAJ/DPGun6x+HUOq7Gus73A6IzLp12ZoiHN3n
22
- kY+lG8cMs039QAe/OhZFEo5I9cNSaI688HmsLRivZ26WoPEnwcN0MHQGtXqGmMUI
23
- CcpgJqllqdWMuBlYcpSadn7rZzPujSlzIxkvieLeAQKBgQDNTYUWZdGbA2sHcBpJ
24
- rqKwDYF/AwZtjx+hXHVBRbR6DJ1bO2P9n51ioTMP/H9K61OBAMZ7w71xJ2I+9Snv
25
- cYumPWoiUwiOhTh3O7nYz6mR7sK0HuUCZfYdaxJVnLgNCgj+w9AxYnkzOyL9/QvJ
26
- knrlMKf4H59NbapBqy5spilq1QKBgQDL1wkGHhoTuLb5Xp3X3CX4S7WMke4T01bO
27
- PpMmlewVgH5lK5wTcZjB8QRO2QFQtUZTP/Ghv6ZH4h/3P9/ZIF3hV5CSsUkr/eFf
28
- MY+fQL1K/puwfZbSDcH1GtDToOyoLFIvPXBJo0Llg/oF2TK1zGW3cPszeDf/Tm6x
29
- UwUMw2BjSQKBgEJzAMyLEBi4NoAlzJxkpcuN04gkloQHexljL6B8yzlls9i/lFGW
30
- w/4UZs6ZzymUmWZ7tcKBTGO/d5EhEP2rJqQb5KpPbcmTXP9amYCPVjchrGtYRI9O
31
- KSbEbR7ApuGxic/L2Sri0I/AaEcFDDel7ZkY8oTg11LcV+sBWPlZnrYxAoGBALXj
32
- /DlpQvu2KA/9TfwAhiE57Zax4S/vtdX0IHqd7TyCnEbK00rGYvksiBuTqIjMOSSw
33
- On2K9mXOcZe/d4/YQe2CpY9Ag3qt4R2ArBf/POpep66lYp+thxWgCBfP0V1/rxZY
34
- TIppFJiZW9E8LvPqoBlAx+b1r4IyCrRQ0IDDFo+BAoGBAMCff4XKXHlV2SDOL5uh
35
- V/f9ApEdF4leuo+hoMryKuSQ9Y/H0A/Lzw6KP5FLvVtqc0Kw2D1oLy8O72a1xwfY
36
- 8dpZMNzKAWWS7viN0oC+Ebj2Foc2Mn/J6jdhtP/YRLTqvoTWCa2rVcn4R1BurMIf
37
- La4DJE9BagGdVNTDtynBhKhZ
38
- -----END PRIVATE KEY-----"""
39
- )
40
- ee.Initialize(credentials)
41
-
42
- # احراز هویت هنگام اجرای برنامه
43
- authenticate_gee()
44
-
45
- # تعریف منطقه مورد نظر (مختصات شرکت نیشکر دهخدا)
46
- roi = ee.Geometry.Rectangle([48.5, 31.3, 48.7, 31.5])
47
-
48
- # تابع محاسبه رواناب با استفاده از روش SCS-CN
49
- def calculate_runoff(start_date, end_date):
50
- # بارش از CHIRPS
51
- chirps = ee.ImageCollection('UCSB-CHG/CHIRPS/DAILY') \
52
- .filterDate(start_date, end_date) \
53
- .filterBounds(roi)
54
-
55
- # میانگین بارش در منطقه
56
- precipitation = chirps.mean().clip(roi)
57
 
58
- # فرض یک مقدار ثابت برای CN (شماره منحنی) - در عمل باید دقیق‌تر محاسبه شود
59
- CN = 75 # برای زمین کشاورزی فرضی
60
- S = (1000 / CN) - 10 # پتانسیل نگهداری
61
- P = precipitation # بارش
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
 
63
- # فرمول SCS-CN برای محاسبه رواناب (Q)
64
- Q = P.expression(
65
- '((P - 0.2 * S) ** 2) / (P + 0.8 * S)', {
66
- 'P': P,
67
- 'S': S
68
- }).where(P.lt(0.2 * S), 0) # اگر بارش کمتر از 0.2S باشد، رواناب صفر است
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
 
70
- return Q
 
 
 
71
 
72
- # رابط کاربری Streamlit
73
- st.title("محاسبه و نمایش رواناب منطقه نیشکر دهخدا")
74
- st.write("این برنامه رواناب را با استفاده از داده‌های Google Earth Engine محاسبه و نمایش می‌دهد.")
75
-
76
- # انتخاب بازه زمانی
77
- start_date = st.date_input("تاریخ شروع", value=datetime(2023, 1, 1))
78
- end_date = st.date_input("تاریخ پایان", value=datetime(2023, 12, 31))
79
-
80
- if st.button("محاسبه و نمایش نقشه"):
81
- # محاسبه رواناب
82
- runoff = calculate_runoff(start_date.strftime('%Y-%m-%d'), end_date.strftime('%Y-%m-%d'))
83
-
84
- # ایجاد نقشه با folium و geemap
85
- m = geemap.Map(center=[31.4, 48.6], zoom=10)
86
- m.addLayer(runoff, {'min': 0, 'max': 50, 'palette': ['blue', 'green', 'yellow', 'red']}, 'رواناب (mm)')
87
- m.addLayer(roi, {}, 'منطقه نیشکر دهخدا')
88
-
89
- # نمایش نقشه در Streamlit
90
- st.write("نقشه رواناب:")
91
- m.to_streamlit(height=600)
 
 
 
 
 
 
 
92
 
93
- st.write("توجه: مقدار شماره منحنی (CN) به صورت فرضی 75 در نظر گرفته شده است. برای دقت بیشتر، باید داده‌های محلی خاک و کاربری زمین استفاده شود.")
 
 
 
 
1
  import streamlit as st
2
+ import pandas as pd
3
+ import numpy as np
4
+ from datetime import datetime
5
+ import plotly.express as px
6
+ import sqlite3
7
+ from pathlib import Path
8
 
9
+ # تنظیمات اولیه
10
+ st.set_page_config(page_title="سامانه مدیریت مزارع نیشکر", layout="wide", direction="rtl")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
 
12
+ # ایجاد دیتابیس
13
+ def init_db():
14
+ conn = sqlite3.connect('sugarcane_farms.db')
15
+ c = conn.cursor()
16
+ c.execute('''
17
+ CREATE TABLE IF NOT EXISTS farm_data (
18
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
19
+ row_number INTEGER,
20
+ representative TEXT,
21
+ channel INTEGER,
22
+ department INTEGER,
23
+ production INTEGER,
24
+ cultivation_area REAL,
25
+ sub_area REAL,
26
+ variety TEXT,
27
+ age TEXT,
28
+ station1 REAL,
29
+ station2 REAL,
30
+ station3 REAL,
31
+ station4 REAL,
32
+ station5 REAL,
33
+ current_height REAL,
34
+ previous_height REAL,
35
+ current_growth REAL,
36
+ previous_growth REAL,
37
+ current_nitrogen REAL,
38
+ current_nitrogen_std REAL,
39
+ previous_nitrogen REAL,
40
+ previous_nitrogen_std REAL,
41
+ current_moisture REAL,
42
+ current_moisture_std REAL,
43
+ previous_moisture REAL,
44
+ previous_moisture_std REAL,
45
+ well1_depth REAL,
46
+ well2_depth REAL,
47
+ reading_date DATE
48
+ )
49
+ ''')
50
+ conn.commit()
51
+ conn.close()
52
 
53
+ # فرم ورود داده
54
+ def data_entry_form():
55
+ st.header("فرم ورود داده‌های مزارع نیشکر")
56
+
57
+ col1, col2, col3 = st.columns(3)
58
+
59
+ with col1:
60
+ row_number = st.number_input("ردیف", min_value=1, max_value=99)
61
+ representative = st.text_input("نماینده (مثال: 01-22)")
62
+ channel = st.selectbox("کانال", options=[i for i in range(1, 31) if i != 28])
63
+ department = st.selectbox("اداره", options=[1, 2, 3, 4])
64
+ production = st.selectbox("تولید", options=[1, 2])
65
+
66
+ with col2:
67
+ cultivation_area = st.number_input("مساحت داشت", min_value=0.0)
68
+ sub_area = st.number_input("مساحت زیرمجموعه", min_value=0.0)
69
+ variety = st.selectbox("واریته", options=["CP69", "CP48", "CP57"])
70
+ age = st.selectbox("سن", options=["R1", "R2", "P"])
71
+
72
+ with col3:
73
+ reading_date = st.date_input("تاریخ قرائت")
74
+
75
+ # ایستگاه‌های اندازه‌گیری
76
+ st.subheader("ایستگاه‌های اندازه‌گیری")
77
+ col1, col2, col3, col4, col5 = st.columns(5)
78
+
79
+ with col1:
80
+ station1 = st.number_input("ایستگاه 1", min_value=0.0)
81
+ with col2:
82
+ station2 = st.number_input("ایستگاه 2", min_value=0.0)
83
+ with col3:
84
+ station3 = st.number_input("ایستگاه 3", min_value=0.0)
85
+ with col4:
86
+ station4 = st.number_input("ایستگاه 4", min_value=0.0)
87
+ with col5:
88
+ station5 = st.number_input("ایستگاه 5", min_value=0.0)
89
+
90
+ # محاسبه خودکار ارتفاع هفته جاری
91
+ current_height = np.mean([station1, station2, station3, station4, station5])
92
+ st.info(f"ارتفاع هفته جاری مزرعه (محاسبه شده): {current_height:.2f}")
93
+
94
+ # ادامه فرم...
95
+ col1, col2 = st.columns(2)
96
+
97
+ with col1:
98
+ previous_height = st.number_input("ارتفاع هفته گذشته مزرعه", min_value=0.0)
99
+ current_growth = current_height - previous_height
100
+ st.info(f"رشد هفته جاری (محاسبه شده): {current_growth:.2f}")
101
+ previous_growth = st.number_input("رشد هفته گذشته", min_value=0.0)
102
 
103
+ # دکمه ذخیره
104
+ if st.button("ذخیره اطلاعات"):
105
+ save_data(locals())
106
+ st.success("اطلاعات با موفقیت ذخیره شد!")
107
 
108
+ # تابع ذخیره‌سازی داده‌ها
109
+ def save_data(data):
110
+ conn = sqlite3.connect('sugarcane_farms.db')
111
+ c = conn.cursor()
112
+
113
+ # ایجاد query برای ذخیره داده‌ها
114
+ query = """
115
+ INSERT INTO farm_data (
116
+ row_number, representative, channel, department, production,
117
+ cultivation_area, sub_area, variety, age, station1, station2,
118
+ station3, station4, station5, current_height, previous_height,
119
+ current_growth, previous_growth, reading_date
120
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
121
+ """
122
+
123
+ values = (
124
+ data['row_number'], data['representative'], data['channel'],
125
+ data['department'], data['production'], data['cultivation_area'],
126
+ data['sub_area'], data['variety'], data['age'], data['station1'],
127
+ data['station2'], data['station3'], data['station4'], data['station5'],
128
+ data['current_height'], data['previous_height'], data['current_growth'],
129
+ data['previous_growth'], data['reading_date']
130
+ )
131
+
132
+ c.execute(query, values)
133
+ conn.commit()
134
+ conn.close()
135
 
136
+ # اجرای برنامه
137
+ if __name__ == "__main__":
138
+ init_db()
139
+ data_entry_form()