Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -50,6 +50,7 @@ key_json = {
|
|
50 |
"universe_domain": "googleapis.com"
|
51 |
}
|
52 |
|
|
|
53 |
# تبدیل دیکشنری به رشته JSON
|
54 |
key_json_str = json.dumps(key_json)
|
55 |
|
@@ -68,7 +69,7 @@ def load_farm_data():
|
|
68 |
return None
|
69 |
|
70 |
@st.cache_data
|
71 |
-
def get_safe_index_value(_image, index_type, band_selection,
|
72 |
"""محاسبه ایمن شاخصهای گیاهی"""
|
73 |
if _image is None:
|
74 |
return None
|
@@ -83,7 +84,7 @@ def get_safe_index_value(_image, index_type, band_selection, farm_geometry, imag
|
|
83 |
|
84 |
mean_value = index_image.reduceRegion(
|
85 |
reducer=ee.Reducer.mean(),
|
86 |
-
geometry=
|
87 |
scale=10
|
88 |
).get(index_type if index_type != "MSAVI" else "MSAVI").getInfo()
|
89 |
|
@@ -97,11 +98,11 @@ def calculate_lai(ndvi):
|
|
97 |
return -1.325 + 6.331 * ndvi - 2.239 * (ndvi ** 2)
|
98 |
|
99 |
@st.cache_data
|
100 |
-
def get_weekly_average_ndvi(
|
101 |
"""محاسبه میانگین هفتگی NDVI"""
|
102 |
s2_collection = ee.ImageCollection("COPERNICUS/S2") \
|
103 |
.filterDate(start_date, end_date) \
|
104 |
-
.filterBounds(
|
105 |
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
|
106 |
|
107 |
def calculate_ndvi(image):
|
@@ -114,25 +115,25 @@ def get_weekly_average_ndvi(farm_geometry, start_date, end_date):
|
|
114 |
|
115 |
mean_ndvi = weekly_ndvi.reduceRegion(
|
116 |
reducer=ee.Reducer.mean(),
|
117 |
-
geometry=
|
118 |
scale=10
|
119 |
).get('NDVI').getInfo()
|
120 |
|
121 |
return mean_ndvi
|
122 |
|
123 |
@st.cache_data
|
124 |
-
def perform_clustering(
|
125 |
"""انجام خوشهبندی بر اساس NDVI"""
|
126 |
s2_collection = ee.ImageCollection("COPERNICUS/S2") \
|
127 |
.filterDate(start_date, end_date) \
|
128 |
-
.filterBounds(
|
129 |
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
|
130 |
|
131 |
composite = s2_collection.median()
|
132 |
ndvi = composite.normalizedDifference(['B8', 'B4']).rename('NDVI')
|
133 |
|
134 |
training = ndvi.sample(
|
135 |
-
region=
|
136 |
scale=10,
|
137 |
numPixels=100
|
138 |
)
|
@@ -253,6 +254,7 @@ def main():
|
|
253 |
|
254 |
# تعریف هندسه مزرعه با استفاده از طول و عرض جغرافیایی
|
255 |
farm_geometry = ee.Geometry.Point([farm_info['longitude'], farm_info['latitude']])
|
|
|
256 |
|
257 |
# ایجاد یک بافر اطراف نقطه مرکزی مزرعه (مثلاً به شعاع 100 متر)
|
258 |
farm_geometry = farm_geometry.buffer(100)
|
@@ -284,7 +286,7 @@ def main():
|
|
284 |
if s2_collection.size().getInfo() > 0:
|
285 |
s2 = s2_collection.first()
|
286 |
for index in band_selection.keys():
|
287 |
-
value = get_safe_index_value(s2, index, band_selection, farm_geometry, date_str)
|
288 |
index_values[index].append(value)
|
289 |
else:
|
290 |
for index in band_selection.keys():
|
@@ -295,11 +297,11 @@ def main():
|
|
295 |
index_values[index].append(0)
|
296 |
|
297 |
# محاسبه میانگین هفتگی NDVI
|
298 |
-
weekly_ndvi = get_weekly_average_ndvi(farm_geometry, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"))
|
299 |
st.write(f"میانگین هفتگی NDVI: {weekly_ndvi:.2f}")
|
300 |
|
301 |
# انجام خوشهبندی
|
302 |
-
clustering_result = perform_clustering(farm_geometry, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"))
|
303 |
|
304 |
# نمایش نمودارها و نقشه NDVI
|
305 |
col1, col2 = st.columns(2)
|
|
|
50 |
"universe_domain": "googleapis.com"
|
51 |
}
|
52 |
|
53 |
+
|
54 |
# تبدیل دیکشنری به رشته JSON
|
55 |
key_json_str = json.dumps(key_json)
|
56 |
|
|
|
69 |
return None
|
70 |
|
71 |
@st.cache_data
|
72 |
+
def get_safe_index_value(_image, index_type, band_selection, _farm_geometry, image_date, farm_coords):
|
73 |
"""محاسبه ایمن شاخصهای گیاهی"""
|
74 |
if _image is None:
|
75 |
return None
|
|
|
84 |
|
85 |
mean_value = index_image.reduceRegion(
|
86 |
reducer=ee.Reducer.mean(),
|
87 |
+
geometry=_farm_geometry,
|
88 |
scale=10
|
89 |
).get(index_type if index_type != "MSAVI" else "MSAVI").getInfo()
|
90 |
|
|
|
98 |
return -1.325 + 6.331 * ndvi - 2.239 * (ndvi ** 2)
|
99 |
|
100 |
@st.cache_data
|
101 |
+
def get_weekly_average_ndvi(_farm_geometry, start_date, end_date, farm_coords):
|
102 |
"""محاسبه میانگین هفتگی NDVI"""
|
103 |
s2_collection = ee.ImageCollection("COPERNICUS/S2") \
|
104 |
.filterDate(start_date, end_date) \
|
105 |
+
.filterBounds(_farm_geometry) \
|
106 |
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
|
107 |
|
108 |
def calculate_ndvi(image):
|
|
|
115 |
|
116 |
mean_ndvi = weekly_ndvi.reduceRegion(
|
117 |
reducer=ee.Reducer.mean(),
|
118 |
+
geometry=_farm_geometry,
|
119 |
scale=10
|
120 |
).get('NDVI').getInfo()
|
121 |
|
122 |
return mean_ndvi
|
123 |
|
124 |
@st.cache_data
|
125 |
+
def perform_clustering(_farm_geometry, start_date, end_date, farm_coords):
|
126 |
"""انجام خوشهبندی بر اساس NDVI"""
|
127 |
s2_collection = ee.ImageCollection("COPERNICUS/S2") \
|
128 |
.filterDate(start_date, end_date) \
|
129 |
+
.filterBounds(_farm_geometry) \
|
130 |
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))
|
131 |
|
132 |
composite = s2_collection.median()
|
133 |
ndvi = composite.normalizedDifference(['B8', 'B4']).rename('NDVI')
|
134 |
|
135 |
training = ndvi.sample(
|
136 |
+
region=_farm_geometry,
|
137 |
scale=10,
|
138 |
numPixels=100
|
139 |
)
|
|
|
254 |
|
255 |
# تعریف هندسه مزرعه با استفاده از طول و عرض جغرافیایی
|
256 |
farm_geometry = ee.Geometry.Point([farm_info['longitude'], farm_info['latitude']])
|
257 |
+
farm_coords = f"{farm_info['longitude']},{farm_info['latitude']}"
|
258 |
|
259 |
# ایجاد یک بافر اطراف نقطه مرکزی مزرعه (مثلاً به شعاع 100 متر)
|
260 |
farm_geometry = farm_geometry.buffer(100)
|
|
|
286 |
if s2_collection.size().getInfo() > 0:
|
287 |
s2 = s2_collection.first()
|
288 |
for index in band_selection.keys():
|
289 |
+
value = get_safe_index_value(s2, index, band_selection, farm_geometry, date_str, farm_coords)
|
290 |
index_values[index].append(value)
|
291 |
else:
|
292 |
for index in band_selection.keys():
|
|
|
297 |
index_values[index].append(0)
|
298 |
|
299 |
# محاسبه میانگین هفتگی NDVI
|
300 |
+
weekly_ndvi = get_weekly_average_ndvi(farm_geometry, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"), farm_coords)
|
301 |
st.write(f"میانگین هفتگی NDVI: {weekly_ndvi:.2f}")
|
302 |
|
303 |
# انجام خوشهبندی
|
304 |
+
clustering_result = perform_clustering(farm_geometry, start_date.strftime("%Y-%m-%d"), end_date.strftime("%Y-%m-%d"), farm_coords)
|
305 |
|
306 |
# نمایش نمودارها و نقشه NDVI
|
307 |
col1, col2 = st.columns(2)
|