#!/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