Stream profiles

Whether you're studying tectonics, erosion potential, riparian biology, etc, digital representations of streams can help you. The key, though, is to figure out how to delineate their channels.

With a GIS software and digital elevation data (see the "Geospatial Tasks" tab for some sources), you can easily and quickly construct channel networks.


1) Obtain your elevation data, whether from the internet or an institution's database.

2) Look at the metadata included with the DEM to figure out its projection type. This part is absolutely necessary for the DEM to be of any use. Also figure out which file type your DEM is in.

3) Open your GIS (GRASS, for me), and import your data. Make sure that the project is in the same geographic projection as the data. If it isn't, bad things happen! I've tried to import DEMs that have Lat/Long coordinates into maps that operate in units of meters. ALL YOUR MEASUREMENTS WILL BE SKEWED, and will likely look like nonsense if your projection is wrong. If what I've said doesn't make sense, please review basic projection concepts and terminology here:



4) Good GIS systems have stream extraction tools built in to their primary capabilities. In GRASS, the most useful variant is the r.watershed tool. Tinker with this tool. It takes a DEM as an input, asks for the minimum size of drainage basins (Bigger basins get rid of smaller streams), and spits out several useful maps: drainages, streams, flow accumulation, direction of flow. 

5) One benefit of using GRASS is its simple approach to converting between raster and vector formats. Your map of stream segments is something you'd likely wish to trim so that it only contains the particular channel you wish to study. In raster format, you're stuck with all the segments.

Use r.to.vect to convert your stream raster to a collection of lines.

6) Open the heads-up digitizer to enable editing, and delete all unwanted stream channels. Don't worry about removing the small tributaries that cling to your targeted stream.

7) Another benefit is that GRASS has a nifty cleanup algorithm (v.clean), particularly capable of trimming off small, unwanted tributaries, given a minimum channel length to keep. Do this, perhaps multiple times, using v.polyline in between runs to consolidate your stream segments into one long mass.

8) Once you have your stream, you can use v.segment to generate points along your line (stream channel). Look up how to use a rules file (see my main GRASS tutorial, linked in "Geospatial Tasks"). Generate your points.

9) Since v.segment generates points at an interval you decide on, you already know the spacing between elevations in your profile. Use the v.what.rast tool to extract elevation data from your DEM.

10) Export your points as a .csv file or some other text file format. You can open the data in Excel, R, Matlab, Python, or whatever you choose. There, you can plot the cross-section profile, calculate channel slope, etc.


Closing note: When you ran the r.watershed tool, you were given the option to create and store a raster of "flow accumulation", or a spatial record for each cell of how many other cells drain into it. Using the Raster Calculator tool to multiply the Flow Accumulation map by the width and height of each cell (the same throughout the raster), should give you a map of upslope drainage area. For example, if 21 cells drain into a stream near its head, and each cell is 30m x 30m, the resulting contributing area for that portion of the stream would be 21 x 30 x 30 = 18,900 m^2. 

You can extract these drainage area data to the same points that contain your elevation. In Excel, you can add in the distance from point to point (You, after all, did specify what that would be, in order to use v.segments). With these three items, you can construct stream profiles, calculate slope, normalized steepness (ksn), etc. 
Comments