# Installs geemap package
import subprocess
try:
import geemap
except ImportError:
print("geemap package not installed. Installing ...")
subprocess.check_call(["python", "-m", "pip", "install", "geemap"])
import ee
import geemap
Map = geemap.Map()
Map
roi = ee.FeatureCollection("TIGER/2018/States").filter(
ee.Filter.eq("NAME", "Tennessee")
)
Map.addLayer(roi, {}, "TN")
Map.centerObject(roi, 7)
images = geemap.landsat_timeseries(
roi=roi, start_year=1984, end_year=2020, start_date="01-01", end_date="12-31"
)
first = images.first()
vis_params = {"bands": ["NIR", "Red", "Green"], "min": 0, "max": 3000}
Map.addLayer(first, vis_params, "First image")
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")
water_images = ndwi_images.map(lambda img: img.gt(0).selfMask())
first_water = water_images.first()
Map.addLayer(first_water, {"palette": ["blue"]}, "First Water")
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})
water_areas = water_images.map(cal_area)
water_stats = water_areas.aggregate_array("water_area").getInfo()
water_stats
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()
Map.addLayerControl()
Map