Wednesday, June 22, 2011

Watershed Analysis using GRASS GIS

After following an exercise provided at <http://www.ing.unitn.it/~grass/docs/tutorial_64_en/htdocs/esercitazione/dtm/dtm4.html>, I have been playing around with different thresholds and flow routing algorithms in GRASS GIS to try to reproduce the National Hydrography Dataset Plus provided by <http://www.horizon-systems.com/nhdplus/>. Below is the NHDPlus elevation, flowlines, and waterbodies data for Puerto Rico. I also added the HUC10 boundary for the Rio Grande de Arecibo basin.
Rio Grande de Arecibo basin in Puerto Rico with flowlines and waterbodies from NHDPlus
One thing I've been concerned with is representing the waterbodies accurately. From the GRASS GIS book, "The r.watershed module does not require filling of depressions (pits, sinks) in DEM prior to its application because it uses the least-cost algorithm to traverse the elevation surface to the outlet." So, I wanted to test some things.

Close up of the southwest corner of the watershed where Lago Garza is located

Two lakes in the eastern-central part of the watershed

Firstly, I ran r.watershed using SFD and MFD without filling in the depressions.

Using r.watershed with threshold of 10000 and single flow direction from the command line...

r.watershed elevation=elev_cm accumulation=rwater_accum10Ksfd   drainage=rwater_draindir10Ksfd basin=rwater_basin10Ksfd stream=rwater_streams10Ksfd threshold=10000

And, the results...
Basin map from using threshold of 10000 and single flow direction


Accumulation map with threshold of 10000 and single flow direction
Here is a close up of the southwest corner of the watershed

Close up of southwest corner accumulation map for the watershed

Taking the log of the accumulation map

r.mapcalc 'log_rwater_accum10Ksfd=log(abs(rwater_accum10Ksfd)+1)'

log accumulation
Here is the close up from using the MFD method
Accumulation map using MFD method
And taking the log again

Log accumulation map using MFD method
Here are the two lakes from the middle of the watershed
Log accumulation map of the two lakes in the middle of the watershed using MFD method


Next, I tried r.watershed after filling in the depressions.

r.fill.dir elev_cm el=elev_fill1 dir=dir1 areas=unres1
r.fill.dir elev_fill1 el=elev_fill2 dir=dir2 areas=unres2
r.fill.dir elev_fill2 el=elev_fill3 dir=dir3 areas=unres3

r.mapcalc 'depr_bin=if((elev_cm - elev_fill3)<0., 1, null())'

NHD Plus waterbodies outlined in blue and the depression filled raster map shown in fuschia

The accumulation map after running r.watershed with the depressions filled seems like it would represent the streams better.

Accumulation map when using depression map and MFD method

However, the resulting streams are not as expected. I tried using each level of filled depressions, and different ways to extract the streams from the accumulation map, but none gave good results.

Streams resulting from using a depression filled map

Here is a map with the streams derived from using r.watershed with SFD on top of the NHDPlus flowlines.
Streams derived from r.watershed using SFD in fuschia and the NHDPlus flowlines in blue

Here is SFD, MFD, and the NHDPlus all in one.
NHDPlus(blue), SFD(magenta), and MFD(light brown)

The MFD method using

r.mapcalc 'inf_rivers=if(log_accumulation>6)'

to extract the streams seems to match the NHDPlus flowlines the best.

 

No comments:

Post a Comment