Esmaeilkianii commited on
Commit
591fafd
·
verified ·
1 Parent(s): 227ec11

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +13 -11
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, farm_geometry, image_date):
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=farm_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(farm_geometry, start_date, end_date):
101
  """محاسبه میانگین هفتگی NDVI"""
102
  s2_collection = ee.ImageCollection("COPERNICUS/S2") \
103
  .filterDate(start_date, end_date) \
104
- .filterBounds(farm_geometry) \
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=farm_geometry,
118
  scale=10
119
  ).get('NDVI').getInfo()
120
 
121
  return mean_ndvi
122
 
123
  @st.cache_data
124
- def perform_clustering(farm_geometry, start_date, end_date):
125
  """انجام خوشه‌بندی بر اساس NDVI"""
126
  s2_collection = ee.ImageCollection("COPERNICUS/S2") \
127
  .filterDate(start_date, end_date) \
128
- .filterBounds(farm_geometry) \
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=farm_geometry,
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)