Predict Floods with Unit Hydrographs¶
Estimate stream runoff during a predicted rainstorm in Vermont.
Table of Contents¶
- Necessary Imports
- Connect to your GIS
- Get daya for analysis
- Remove imperfections in elevation model
- Delineate the watershed
- Create a velocity field
- Create an isochrone map
- Create a unit hydrograph
Stowe, a small Vermont town of nearly 5,000 residents, suffered considerably when the remnants of Hurricane Irene stuck the Green Mountain region in August 2011. The Little River overflowed and washed out roads, bridges, and culverts. Wanting to learn from the tragedy, Stowe officials discovered that they had precious little information involving flood prediction. They turned to hydrographs, which are line graphs determining how much water a stream will discharge during a rainstorm. In this notebook, you'll create those hydrographs.
Overwiew of the steps to be followed:
Remove imperfections in elevation model: Fill sinks in your elevation model to remove small imperfections in the data.
Delineate the watershed: Find the contributing area above a set of cells in an elevation model.
Create a velocity field: Determine how fast water flows with a spatially variant, time- and discharge-invariant velocity field.
Create an isochrone map: Assess the time it takes water to follow the flow path.
Create a unit hydrograph: Use the isochrone map to create a unit hydrograph for the outlet.
from arcgis.gis import GIS from datetime import datetime as dt from arcgis.raster.functions.gbl import flow_direction, sink, fill, flow_accumulation, snap_pour_point, watershed from arcgis.raster.functions import slope, raster_calculator, con from arcgis.raster.analytics import convert_feature_to_raster
gis = GIS('https://pythonapi.playground.esri.com/portal', 'arcgis_python', 'amazing_arcgis_123')
We need the following layers layers include the following:
Pour_point—A point feature layer that depicts the outlet downstream of the Little River where you'll create a unit hydrograph.
Stowe_boundary—A polygon feature layer that depicts the boundaries of Stowe, Vermont. This layer was derived from data available from Vermont Center for Geographic Information (VCGI).
Stowe_surface_water—A raster layer that depicts all surface water bodies in the area of interest. This raster layer's resolution is 30 meters, which means that each cell in the layer has an area of 30 square meters. The layer was derived from features in the NHDPlus Version 2 dataset.
Stowe_DEM—A raster layer that depicts elevation within the study area. It also has a resolution of 30 meters. It was derived from data made available by the United States Geological Survey (USGS).
Stowe_velocity_example—A raster layer that depicts a spatially-variant, time- and discharge-invariant velocity field for the study area. You'll learn how to create this layer in a later lesson (this example is provided as a backup). For now, you don't need this layer, so it's turned off.
item = gis.content.get('36cbda7cabdb4933a60ee437f49da25b')
pour_point = item.layers stowe_boundary = item.layers
stowe_dem_item = gis.content.get('e8528b08a18b48958e16cc239d074e0d') stowe_dem_item
stowe_dem = stowe_dem_item.layers
stowe_surface_water_item = gis.content.get('0abe2fe5b4694f08990907ce4ddcca62')
stowe_surface_water = stowe_surface_water_item.layers
m1 = gis.map('Stowe, Vermont') m1
Some DEMs contain sinks, which are areas of low elevation surrounded by higher elevation values. Sinks can occur naturally but are more often data errors in a DEM raster dataset. Because water has no way of flowing out of a sink, sinks can cause all kinds of errors when analyzing how water flows to an outlet. Before you begin your hydrological analysis of flooding potential in Stowe, you'll identify and remove sinks from your elevation data.
First, you'll identify sinks in your DEM. Although your DEM was derived from reliable data provided by the USGS, sinks may still be present. To run an accurate hydrological analysis for the area around Stowe, you'll first need to locate sinks if any.
stowe_flow_direction = flow_direction(stowe_dem).save('stowe_flow_direction' + str(dt.now().microsecond))
m2 = gis.map('Stowe, Vermont') m2