UjjwalKGupta commited on
Commit
8e4278b
·
verified ·
1 Parent(s): a9d1c68

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -16
app.py CHANGED
@@ -93,10 +93,22 @@ def reduce_zonal_ndvi(image, ee_object):
93
  )
94
  return image.set(reduced)
95
 
 
96
  def calculate_NDVI(image):
97
  ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI')
98
  return ndvi
99
 
 
 
 
 
 
 
 
 
 
 
 
100
  # Get Zonal NDVI
101
  def get_zonal_ndvi(collection, geom_ee_object):
102
  reduced_collection = collection.map(lambda image: reduce_zonal_ndvi(image, ee_object=geom_ee_object))
@@ -106,16 +118,6 @@ def get_zonal_ndvi(collection, geom_ee_object):
106
  df = pd.DataFrame({'NDVI': stats_list, 'Date': dates, 'Imagery': filenames})
107
  return df
108
 
109
- def get_zonal_ndviYoY(collection, ee_object):
110
- ndvi_collection = collection.map(calculate_NDVI)
111
- max_ndvi = ndvi_collection.max()
112
- reduced_max_ndvi = max_ndvi.reduceRegion(
113
- reducer=ee.Reducer.mean(),
114
- geometry=ee_object.geometry(),
115
- scale=10,
116
- maxPixels=1e12)
117
- return reduced_max_ndvi
118
-
119
 
120
  # put title in center
121
  st.markdown("""
@@ -203,27 +205,31 @@ if uploaded_file is not None:
203
  st.line_chart(resultant_df[['AvgNDVI_Inside', 'Avg_NDVI_Buffer', 'Date']].set_index('Date'))
204
 
205
  ####### YoY Profile ########
206
- start_year = 2017
207
  end_year = 2023
208
 
209
  max_ndvi_geoms = []
210
  max_ndvi_buffered_geoms = []
211
  for year in range(start_year, end_year+1):
212
- start_ddmm = start_date[:4] + str(year)
213
- end_ddmm = end_date[:4] + str(year)
 
 
214
 
215
  # Filter data based on the date, bounds, cloud coverage and select NIR and Red Band
216
  collection = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED").filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', max_cloud_cover)).filter(ee.Filter.date(start_ddmm, end_ddmm)).select(['B4', 'B8'])
217
-
218
  # Get Zonal NDVI based on collection and geometries (Original KML and Buffered KML)
219
  max_ndvi_geoms.append(get_zonal_ndviYoY(collection.filterBounds(geom_ee_object), geom_ee_object))
220
  max_ndvi_buffered_geoms.append(get_zonal_ndviYoY(collection.filterBounds(buffered_ee_object), buffered_ee_object))
221
-
 
222
  yoy_df = pd.DataFrame({'Year': list(range(start_year, end_year+1)), 'NDVI_Inside': max_ndvi_geoms, 'NDVI_Buffer': max_ndvi_buffered_geoms})
 
223
 
224
  # plot the time series
225
  st.write("Year on Year Plot")
226
- st.line_chart(yoy_df[['NDVI_Inside', 'NDVI_Buffer', 'Year']].set_index('Year'))
227
 
228
  # Visualize map on ESRI basemap
229
  st.write("Map Visualization")
 
93
  )
94
  return image.set(reduced)
95
 
96
+ # Calculate NDVI
97
  def calculate_NDVI(image):
98
  ndvi = image.normalizedDifference(['B8', 'B4']).rename('NDVI')
99
  return ndvi
100
 
101
+ # Get Zonal NDVI for Year on Year Profile
102
+ def get_zonal_ndviYoY(collection, ee_object):
103
+ ndvi_collection = collection.map(calculate_NDVI)
104
+ max_ndvi = ndvi_collection.max()
105
+ reduced_max_ndvi = max_ndvi.reduceRegion(
106
+ reducer=ee.Reducer.mean(),
107
+ geometry=ee_object.geometry(),
108
+ scale=10,
109
+ maxPixels=1e12)
110
+ return reduced_max_ndvi.get('NDVI').getInfo()
111
+
112
  # Get Zonal NDVI
113
  def get_zonal_ndvi(collection, geom_ee_object):
114
  reduced_collection = collection.map(lambda image: reduce_zonal_ndvi(image, ee_object=geom_ee_object))
 
118
  df = pd.DataFrame({'NDVI': stats_list, 'Date': dates, 'Imagery': filenames})
119
  return df
120
 
 
 
 
 
 
 
 
 
 
 
121
 
122
  # put title in center
123
  st.markdown("""
 
205
  st.line_chart(resultant_df[['AvgNDVI_Inside', 'Avg_NDVI_Buffer', 'Date']].set_index('Date'))
206
 
207
  ####### YoY Profile ########
208
+ start_year = 2019
209
  end_year = 2023
210
 
211
  max_ndvi_geoms = []
212
  max_ndvi_buffered_geoms = []
213
  for year in range(start_year, end_year+1):
214
+
215
+ # Construct start and end dates for every year
216
+ start_ddmm = str(year)+pd.to_datetime(start_date).strftime("-%m-%d")
217
+ end_ddmm = str(year)+pd.to_datetime(end_date).strftime("-%m-%d")
218
 
219
  # Filter data based on the date, bounds, cloud coverage and select NIR and Red Band
220
  collection = ee.ImageCollection("COPERNICUS/S2_SR_HARMONIZED").filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', max_cloud_cover)).filter(ee.Filter.date(start_ddmm, end_ddmm)).select(['B4', 'B8'])
221
+
222
  # Get Zonal NDVI based on collection and geometries (Original KML and Buffered KML)
223
  max_ndvi_geoms.append(get_zonal_ndviYoY(collection.filterBounds(geom_ee_object), geom_ee_object))
224
  max_ndvi_buffered_geoms.append(get_zonal_ndviYoY(collection.filterBounds(buffered_ee_object), buffered_ee_object))
225
+
226
+ # Create a DataFrame for YoY profile
227
  yoy_df = pd.DataFrame({'Year': list(range(start_year, end_year+1)), 'NDVI_Inside': max_ndvi_geoms, 'NDVI_Buffer': max_ndvi_buffered_geoms})
228
+ yoy_df['Ratio'] = yoy_df['NDVI_Inside'] / yoy_df['NDVI_Buffer']
229
 
230
  # plot the time series
231
  st.write("Year on Year Plot")
232
+ st.line_chart(yoy_df[['NDVI_Inside', 'NDVI_Buffer', 'Ratio', 'Year']].set_index('Year'))
233
 
234
  # Visualize map on ESRI basemap
235
  st.write("Map Visualization")