Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -1,93 +1,139 @@
|
|
1 |
import streamlit as st
|
2 |
-
import
|
3 |
-
import
|
4 |
-
import
|
5 |
-
|
|
|
|
|
6 |
|
7 |
-
#
|
8 |
-
|
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 |
-
|
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 |
-
|
|
|
|
|
|
|
|
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()
|