#!/usr/bin/env python
# coding: utf-8
# [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/giswqs/geemap/blob/master/examples/notebooks/tn_surface_water.ipynb)
# # Automated mapping of surface water in the state of Tennessee using Google Earth Engine cloud computing
#
# Author: Qiusheng Wu ([Website](https://wetlands.io) - [GitHub](https://github.com/giswqs))
#
Contents
#
# ## Install geemap
# In[ ]:
# Installs geemap package
import subprocess
try:
import geemap
except ImportError:
print('geemap package not installed. Installing ...')
subprocess.check_call(["python", '-m', 'pip', 'install', 'geemap'])
# In[ ]:
import ee
import geemap
# ## Create an interactive map
# In[ ]:
Map = geemap.Map()
Map
# ## Define region of interest (ROI)
# In[ ]:
roi = ee.FeatureCollection('TIGER/2018/States') \
.filter(ee.Filter.eq('NAME', 'Tennessee'))
Map.addLayer(roi, {}, "TN")
Map.centerObject(roi, 7)
# ## Create Landsat timeseries
# In[ ]:
images = geemap.landsat_timeseries(roi=roi, start_year=1984, end_year=2020, start_date='01-01', end_date='12-31')
# In[ ]:
first = images.first()
vis_params = {
'bands': ['NIR', 'Red', 'Green'],
'min': 0,
'max': 3000
}
Map.addLayer(first, vis_params, 'First image')
# ## Calculate Normalized Difference Water Index (NDWI)
# In[ ]:
ndwi_images = images.map(lambda img: img.normalizedDifference(['Green', 'SWIR1']).rename('ndwi'))
ndwi_palette = ['#ece7f2', '#d0d1e6', '#a6bddb', '#74a9cf', '#3690c0', '#0570b0', '#045a8d', '#023858']
first_ndwi = ndwi_images.first()
Map.addLayer(first_ndwi, {'palette': ndwi_palette}, 'First NDWI')
# ## Extract surface water extent
# In[ ]:
water_images = ndwi_images.map(lambda img: img.gt(0).selfMask())
first_water = water_images.first()
Map.addLayer(first_water, {'palette': ['blue']}, 'First Water')
# ## Calculate surface water areas
# In[ ]:
def cal_area(img):
pixel_area = img.multiply(ee.Image.pixelArea()).divide(1e6)
img_area = pixel_area.reduceRegion(**{
'geometry': roi.geometry(),
'reducer': ee.Reducer.sum(),
'scale': 1000,
'maxPixels': 1e12
})
return img.set({'water_area': img_area})
# In[ ]:
water_areas = water_images.map(cal_area)
# In[ ]:
water_stats = water_areas.aggregate_array('water_area').getInfo()
water_stats
# ## Plot temporal trend
# In[ ]:
import matplotlib.pyplot as plt
x = list(range(1984, 2021))
y = [item.get('ndwi') for item in water_stats]
plt.bar(x, y, align='center', alpha=0.5)
# plt.xticks(y_pos, objects)
plt.ylabel('Area (km2)')
plt.title('Surface water dynamics in Tennessee')
plt.show()
# In[ ]:
Map.addLayerControl()
Map