Digital Geography

Beautiful Watershed Polygons in QGIS

As the title sugests I am showing you, how to create beautiful watershed polygons. We will start with some raster files and use a nice GRASS tool for the main work. But why “beautiful”? As I am a big fan of webmaps and raster analytics tend to result in ugly rectangular structures I am fan of smooth stuff. So check this small tutorial.

The Data

I already mentioned, that we will work with raster data instead of some ugly manual digitization using some maps. In this tutorial we will work with the good old SRTM3 data. Unfortunately the data provided at www.landcover.org are full of missing pixels especially in mountainous regions. I am using height data from CIGAR (cell 39_03 to be exact). So what is the output I am trying to get? I would love to see a basin for each valley in the Alps.

The Computation in QGIS

Compared to ArcGIS, where I remember a ton of steps to calculate watersheds/basins for a raster, the workflow in QGIS is straightforward thanks to the GRASS processing tools. I am using the r.watershed function which only needs a DEM (can have sinks too!) and that’s it. There are tons of other parameters but we will only go by the DEM and the number of pixels for a minimum sized watershed “minimum size of exterior watershed basin”. I am running good with a value of 2000 which means that a basin will be created once at least 2000 cells drain towards a certain pour point. Be careful with this parameter:
Warning: low threshold values will dramactically increase run time and generate difficult to read basin and half_basin results. This parameter also controls the level of detail in the stream segments map.
So here is the interface:

r.watershed interface design with parameters

One more warning: in my current QGIS version 2.12.3 the parameter “Allow only horizontal and vertical flow of water” is checked by default. This made my first usages of the tool useless (check gis.stackexchange.com. If you’re only interested in the basins, choose a file name for the raster “half-basins” or save it after the creation by hand. Uncheck all other exports if you’re not really interested in them! In the end, just press okay and take yourself a coffee. The result might look like this:

half basins created with r.watershed in QGIS

Creating Beautiful Watersheds

Now comes the arty-partsy part. Let’s remove the ugly pixel-structure. Therefore we will use a generalization tool (yes, GENERALIZATION!) together with the Chaikin algorithm. But first we need to convert the raster into a polygon shapefile. Use the r.to.vect algorithm in the toolbox for this purpose:

GRASS’ r.to.vect function in QGIS

and make sure to select “area” as polygon shapefile type twice or you might see some nice lines instead!. Now you have beautiful polygons in your project. Select those of your desired basin and export them as a new shapefile (use “export selected only” in the save as dialog):

GIF showing the valley of interest, the polygons selected and the exported

But here comes the ugly part as you might have a look at the detail:

ugly edges as a result of the raster data

Now we will take of this by using the v.generalize GRASS function from the processing toolbox:

Chaiken generalization in QGIS with v.generalize

As I am a fan of default parameter, let’s only change the number of iterations (I changed it to three) and we will see some nice, smooth polygon borders:

green: prior algorithm, red line: after the algroithm

Check out the result created with QGIS2web:

4
Leave a Reply

avatar
4 Comment threads
0 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
4 Comment authors
Leandro BarrosDiogo CaribéCarlos RivasMohammed Habboub Recent comment authors

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
newest oldest most voted
Notify of
Mohammed Habboub
Guest
Mohammed Habboub

cool

Carlos Rivas
Guest
Carlos Rivas

Nice work!

Diogo Caribé
Guest
Diogo Caribé

Is there possibility to use points (intersections of strems) to define the start of catchment area?

Leandro Barros
Guest
Leandro Barros

Excelent blog, very interesting!