More Hydro Tools: Flow Length


As part of the Hydro extension in ArcGIS, we have usde the Flow Direction and Flow Accumulation tools.  The Flow Direction tool creates a new grid that contains the direction that each of the cells in the grid flows into. The Flow Accumulation tool creates a new grid that contains the number of cells that contribute runoff to a cell in the grid. Now we will work with a tool available in the Raster Calculator, called the Flow Length command.  It creates a grid, called the Flow Length Grid, which indicates the length, in distance units, from each cell in the grid to the outlet (which may be the edge of the grid), following the path the water would take. This lab uses the Flow Direction and Flow Accumulation grids to create a Flow Length grid. In the older (ArcView) version, this command was available as a tool on the Hydro menu, but in ArcGIS, it is only available as a raster calculator command.  

Like the Flow Accumulation grid, the Flow Length grid is created from the Flow Direction grid, not from the DEM. We will use weights to determine distance and travel time. The travel time will vary based on whether the water is in a channel or running downslope. This is a simple version of a runoff model. A more complex model would account for underground flow and surface properties that affect the speed of the water over different slopes values and land uses and land covers. We will simply calculate flow time from where rain falls to an outlet in the DEM.

Questions you need to ask before starting:

  1. What questions do you want to answer?
    1. How much water will pass through a given point on a stream in each of the first four hours of a rain storm.
  2. What data do you need to find the answers?
    1. You will need a 30 meter cell size Digital Elevation Model, with sinks filled
  3. How do you process the data to find the answers you are looking for?
    1. There will be a number of steps, all in ArcGIS:
      • Create the Flow Direction grid
      • Create the Flow Accumulation grid
      • Create a grid that contain only cells that you consider as being part of a drainage channel.
      • Create a weight grid that has two travel times, one for channel flow, one for overland flow.
      • Create a Flow Length grid from the Flow Direction grid and the weight grid you already created.
      • Slice the Flow Length grid in hourly segments for the first 4 hours.
      • Look at the table and find the total number of cells for each hourly segment and multiply by the cell size.

This gives a very basic version of a runoff model. What would you do if you wanted to implement this as an operational model? You would need to account for overland flow through different land uses and land covers, different soils (soil permeability - how much rain is percolates through the soil versus how much runs off), and changes in permeability over the course of a storm. Finally, you would need to calibrate the model for an individual storm and then test that calibration against other storms.

ArcGIS hints

Make sure that you save your intermediate files, such as flow direction and accumulation, to your H:\ or I:\ drive, where they will not be deleted when you log off.  You can do this by making sure to specify the output location when you use the tools.  If you forget to do this, or the it does not save to your directory, then right-click on the new grid and use "Make Permanent" to save it to your directory. 

You may end up with a lot of files clogging your drive space, so when you have finished, go back with ArcCatalog and delete all those datasets that you do not need anymore

Doing the work in ArcGIS

You will use the the filled version of the DEM that you used download a few weeks ago.  

Open ArcGIS and add the DEM to your new map.  Check that the Data View coordinate system gets set to match the data: UTM Zone 19N.  

Check to be sure that the Spatial Analyst Extension is turned on and the toolbar is visible.  

Create the drainage grid. This should contain only the cells that have 400 or more cells contributing runoff them. To do this, go to the Spatial Analyst menu, click on Raster Calculator and make the selection [flow_accu] > 400

This will create a new grid called "Calculation#", which shows your drainage channels. Right-click on Calculation#, and select "Make Permanent". Save it to your folder, with a name like "drainage". Change the name of the layer in your table of contents to match, and give it useful colors.

Now we want to create a Weight Grid that classifies the land as 10 and your drainage channels as 1, since flow moves much more easily through the channels than overland. To create the Weight Grid, use the Raster Calculator again, and run this command: con([drainage],1,10). Be careful with syntax! The grid "drainage" is the grid that you created in the last step, which contains only cells that have 400 or more cells contributing to runoff.

What are these weights? They are time (in seconds) that the water takes per unit measure (meters in this case. They are the inverse of meters per second. So 1 represents 1 meter per second and 10 represents 1/10 or 0.1 meter per second. Or the numbers (1 and 10) represent the number of seconds that it takes water to traverse a cell in stream and overland respectively. These are examples and you would want to test these number empirically before creating a real runoff model.

Make this layer permanent, renaming it "weightgrid" in both the filename and on your table of contents.

Now create the Flow Length grid. With the Raster Calculator run this command: flowlength([flow_dir], [weightgrid]). Again, remember to be careful with syntax and naming. In this case, the grid "weightgrid" is the grid that contains the weights, 1 and 10, and "flow_dir" is the grid that you create with the Flow Direction command.

Your resulting map should look something like the one below. In this example, darker colors indicate longer travel times, though your symbology may be reversed, with lighter colors indicating longer travel times. To make your drainage chanels visible on top, drag your "drainage" grid to the top of the list, and the non-channel areas (value=0) to "no color", leaving the drainage channels (value=1) visible.

Make your flow length grid permanent, and rename it "flow_length".

Now slice this grid (the Flow Length grid) for each hour of time (for a total of four hours), 1 to 3600 seconds, 3601 to 7200 seconds, 7201 to 10800 seconds, and 10800 to 14400 seconds. Use the Raster Calculator again to do four separate queries. For the first hour, your query should be this: ( [flow_length] <= 3600). This assumes that "flow_length" is the grid that contains the Flow Lengths.

After each Query, open the Attribute table of the newly created grid. You should look at this and get the total area for the for the selected cells. Record the area and multiply by 900 (since each cell is 30 x 30 meters or 900 square meters) and divide by 1,000,000 to get the area in square kilometers. This is what the table for the first hour runoff looks like. The value of approximately 19,310 is the number of cells. The area in square meters is about 17,379,000 and the area in square kilometers is about 17.38.

Your query for the second hour should look like this: ( [flow_length] > 3601) and ([flow_length] <= 7200).

Continue for the first 4 hours of flow. Rename each "hour1", "hour2", etc... Make the area not represented by the hour (value=0) "no color", so that only the area that drains within each hour shows.

Be sure to save your project, and check each data layer to make sure that it is not in a temporary folder where it will be deleted.

Extra work

For this work, you can use the DEM that you downloaded and used in previous assignments. Pick a large basin in the DEM using the stream network and contour lines or DEM shading. Using the watershed tool on the Hydrology menu, create a grid that represents the basin. Make sure the basin is completely within or at least nearly completely within your DEM data (in the example below, it overlaps the edges just a little bit, which is OK).

Notice that the value of the grid is NOT 1 and is arbitrarily assigned.

You will use this grid to create a grid of elevations only within the basin. Use the following query in the Raster Calculator to find the elevations: ( [watershed1] / [watershed1] * [dem]). Again, be careful with syntax. "watershed1" is the grid I created with the watershed tool, and "dem" is the DEM that I worked with. You will need to match the names of the grid you create with the watershed tool and the DEM you are using. Note: You divide Grid 4 by itself to get "1" where it exists, and zero where it does not. This is then multiplied by the actual elevations in the Ashfield DEM to get the elevatins only within the watershed. Make it permanent and call it "watershed_dem"

Your assignment is to repeat the steps in the exercise above, using only the DEM within the watershed. Your end product will be a map of the watershed showing how long (how many hours) it takes for water to drain out of the watershed.

From here you can follow the instructions above, using the DEM of the watershed, not the entire DEM. You will need to modify the names so that they match your project. If you start a new project, the names should be similar to what you have used in class. Always be careful with syntax. Use the buttons to help build queries and calculations. You can cut and paste the queries and calculations from this page and then edit for your names. But retain spaces and parentheses and square brackets and keep a space around operators such as " = ", " > ", " >= ", etc.

What you you should have produced:

  1. A map showing the basin. You should make a layout with the watershed, the drainage channel grid and contour lines. Include scale and information about the map including a title and projection information.
  2. A map showing the areas of the land that contribute to the first four hours of discharge. Change the names of the grids to Hour 1, Hour 2, etc. Add text and scale, etc. as above and also include text with information on how much land area (in square kilometers) is contributing to runoff each hour

Created by Daniel Sheehan
Updated 10/22/07 - DS.