[GRASS-user] floodplain creation

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

···

Le gach dea ghui,

Shane Carey

The r.lake module sets a uniform height of water creating a lake. I think this is not what you want. Have you tried the nice solution suggested by Johannes?

···

On 09/21/2018 06:39 PM, Shane Carey wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

Thanks

Le gach dea ghui,

Shane Carey

_______________________________________________
grass-user mailing list
[grass-user@lists.osgeo.org](mailto:grass-user@lists.osgeo.org)
[https://lists.osgeo.org/mailman/listinfo/grass-user](https://lists.osgeo.org/mailman/listinfo/grass-user)
-- 
Micha Silver
Ben Gurion Univ.
Sde Boker, Remote Sensing Lab
cell: +972-523-665918

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Thanks, I will compare them and let you know the differences.
Thanks

···

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Hi All,

This works well, but doesn’t capture every river - is it a case of making the threshold value smaller or making a deeper carve in the rivers???

Thanks in advance - I think this method would will work well, if it were able to “flood” all rivers.

Thanks

···

On Sun, Sep 23, 2018 at 12:55 PM, Shane Carey <careyshan@gmail.com> wrote:

Thanks, I will compare them and let you know the differences.
Thanks

On Domh 23 MFómh 2018 at 02:09, Vaclav Petras <wenzeslaus@gmail.com> wrote:

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

It’s probably the threshold. How your rivers compare to the ones derived on carved DEM?

···

This works well, but doesn’t capture every river - is it a case of making the threshold value smaller or making a deeper carve in the rivers???

Thanks in advance - I think this method would will work well, if it were able to “flood” all rivers.

On Sun, Sep 23, 2018 at 12:55 PM, Shane Carey <careyshan@gmail.com> wrote:

Thanks, I will compare them and let you know the differences.
Thanks

On Domh 23 MFómh 2018 at 02:09, Vaclav Petras <wenzeslaus@gmail.com> wrote:

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

Yes, this is the problem - there is not exact stream matching with the ones derived on the carved DEM with the “Real” rivers. Any advice on how to get around that?

Thanks

···

On Tue, Sep 25, 2018 at 3:53 AM, Vaclav Petras <wenzeslaus@gmail.com> wrote:

On Mon, Sep 24, 2018 at 6:33 PM Shane Carey <careyshan@gmail.com> wrote:

It’s probably the threshold. How your rivers compare to the ones derived on carved DEM?

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

This works well, but doesn’t capture every river - is it a case of making the threshold value smaller or making a deeper carve in the rivers???

Thanks in advance - I think this method would will work well, if it were able to “flood” all rivers.

On Sun, Sep 23, 2018 at 12:55 PM, Shane Carey <careyshan@gmail.com> wrote:

Thanks, I will compare them and let you know the differences.
Thanks

On Domh 23 MFómh 2018 at 02:09, Vaclav Petras <wenzeslaus@gmail.com> wrote:

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

Cheers

···

On Tue, Sep 25, 2018 at 3:45 PM, Shane Carey <careyshan@gmail.com> wrote:

Yes, this is the problem - there is not exact stream matching with the ones derived on the carved DEM with the “Real” rivers. Any advice on how to get around that?

Thanks

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

On Tue, Sep 25, 2018 at 3:53 AM, Vaclav Petras <wenzeslaus@gmail.com> wrote:

On Mon, Sep 24, 2018 at 6:33 PM Shane Carey <careyshan@gmail.com> wrote:

It’s probably the threshold. How your rivers compare to the ones derived on carved DEM?

This works well, but doesn’t capture every river - is it a case of making the threshold value smaller or making a deeper carve in the rivers???

Thanks in advance - I think this method would will work well, if it were able to “flood” all rivers.

On Sun, Sep 23, 2018 at 12:55 PM, Shane Carey <careyshan@gmail.com> wrote:

Thanks, I will compare them and let you know the differences.
Thanks

On Domh 23 MFómh 2018 at 02:09, Vaclav Petras <wenzeslaus@gmail.com> wrote:

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

Hi,

Is there anyway of the algorithm just being able to create a floodlain for actual real rivers as opposed to the derived river dataset?

Thanks

(attachments)

image.png

···

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

On Tue, Sep 25, 2018 at 3:45 PM, Shane Carey <careyshan@gmail.com> wrote:

Yes, this is the problem - there is not exact stream matching with the ones derived on the carved DEM with the “Real” rivers. Any advice on how to get around that?

Thanks

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

On Tue, Sep 25, 2018 at 3:53 AM, Vaclav Petras <wenzeslaus@gmail.com> wrote:

On Mon, Sep 24, 2018 at 6:33 PM Shane Carey <careyshan@gmail.com> wrote:

It’s probably the threshold. How your rivers compare to the ones derived on carved DEM?

This works well, but doesn’t capture every river - is it a case of making the threshold value smaller or making a deeper carve in the rivers???

Thanks in advance - I think this method would will work well, if it were able to “flood” all rivers.

On Sun, Sep 23, 2018 at 12:55 PM, Shane Carey <careyshan@gmail.com> wrote:

Thanks, I will compare them and let you know the differences.
Thanks

On Domh 23 MFómh 2018 at 02:09, Vaclav Petras <wenzeslaus@gmail.com> wrote:

These are steps based on:

https://grasswiki.osgeo.org/wiki/From_GRASS_GIS_novice_to_power_user_(workshop_at_FOSS4G_Boston_2017)#Hydrology:_Estimating_inundation_extent_using_HAND_methodology

You need r.stream.distance module from Addons:

g.extension r.stream.distance

Get drainage and streams from your DEM (your carved DEM):

r.watershed elevation=dem accumulation=flowacc drainage=drainage stream=streams threshold=100000

Compute height above nearest drainage/stream (HAND):

r.stream.distance stream_rast=streams direction=drainage elevation=elevation method=downstream difference=hand

Use r.lake not on the original DEM, but on the HAND and start flooding (“lake”) from the streams:

r.lake elevation=hand water_level=3 lake=flood_3m seed=streams

Convert to vector if desired:

r.to.vect -s input=flood_3m output=flood_3m type=area

The difference to the r.grow+r.mapcalc method [1] is that this uses an addon module (there should be no problem installing it) and that r.grow uses euclidean distance for what is later used for height difference while r.steam.distance follows drainage and further that r.lake floods only the cells accessible to water unlike the r.mapcalc expression which just looks at height. The two methodological differences can be summarized as “not respecting the surrounding terrain enough.” Anyway, the r.grow+r.mapcalc method can get you quite far and I would be interested in the comparison (will differ for different terrains).

Best,
Vaclav

[1] https://lists.osgeo.org/pipermail/grass-user/2018-September/079134.html

On Fri, Sep 21, 2018 at 11:39 AM Shane Carey <careyshan@gmail.com> wrote:

Hi All,

I have used r.carve to carve out the rivers of a DTM - a really super job. I now need to pour 3meters of water into every cell in the river and see how for this water extends out - onto the floodplain.

I was trying to use r.lake to do this, but unsure as to how r.lake will work to pour 3 meters of water in every cell along the river network.

Any advice on this would be great. It is for the creation of a floodplain.

Thanks

Le gach dea ghui,

Shane Carey


grass-user mailing list
grass-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/grass-user

Le gach dea ghui,

Shane Carey

GIS and Data Solutions Consultant

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Is there anyway of the algorithm just being able to create a floodlain for actual real rivers as opposed to the derived river dataset?

Yes, just convert your streams to raster (presence-absence) and a raster for flow direction as I mentioned here:

https://lists.osgeo.org/pipermail/grass-user/2018-September/079135.html

However, you need to be cautious about fit between the existing streams and the DEM. Definitively check how your existing streams align with the derived ones (where there are both streams).

···

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

Super Vaclav - I am nearly there now - My last bit of the puzzle is to create the flow direction raster. How do I reclassify in order to get the stream direction using r.mapcalc? I am just coping in what you said from your last email Vaclav so that you know which part I am stuck on. This is really super - thanks again

[Since you already have the streams and you want to use them, you need to
convert them to raster and then also get stream direction for
r.stream.distance by reclassifying, e.g. with r.mapcalc]

···

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

My last bit of the puzzle is to create the flow direction raster. How do I reclassify in order to get the stream direction using r.mapcalc?

Hi Shane,

You are welcome. What you need to do are 2 steps: 1) vector to raster conversion with direction to be used for raster values:

v.to.rast input=streams output=streams_direction use=dir

The v.to.rast manual says: “line direction in degrees CCW from east” [1]. However, the r.stream.distance manual specifies the drainage direction to be: “…zero and negative values are valid direction data only if they vary from -8 to 8 (CCW from East in steps of 45 degrees). Flow direction map shall be of integer type (CELL).” So you need to reclassify.

[1] https://grass.osgeo.org/grass74/manuals/v.to.rast.html
[2] https://grass.osgeo.org/grass74/manuals/addons/r.stream.distance.html

The reclassification with r.mapcalc would be something like the following, but I didn’t really check and it may be wrong. Alternative would be to use r.recode.

r.mapcalc “streams_direction_8 = int((streams_direction + 45) / 45)”

So please double check the output from the above and compare it with what you get from r.watershed.

For completeness, here is what I wrote before:

“”"

Yes, just convert your streams to raster (presence-absence) and a raster for flow direction as I mentioned here:

https://lists.osgeo.org/pipermail/grass-user/2018-September/079135.html

Since you already have the streams and you want to use them, you need to convert them to raster and then also get stream direction for r.stream.distance by reclassifying, e.g. with r.mapcalc, output from something like this:

v.to.rast in=streams output=streams_dir use=dir

which you can see in context here (different hydrology tool):

http://ncsu-geoforall-lab.github.io/geospatial-modeling-course/grass/simwe.html
“”"

···

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

Ok cool. When I I try to run the r.stream.distance with this new new stream direction layer (that I calculated with r.mapcalc “streams_direction_8 = int((streams_direction + 45) / 45)” ),

it just hangs on the part that says: “caclulating downstream parameters”. So I am not sure what is going on here - have you any ideas on this?

Also, could you explain a little about what this expression is doing: (streams_direction + 45) / 45)

Thanks Vaclav

···

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

Hi Vaclav,

I have checked the output from r.watershed with what you have calculated and I do see differences in the value obtained by both. Could it be a rounding issue perhaps? The only other difference I see is that the output from r.watershed is a complete raster as opposed to just the river network. See image attached to explain what I mean. Does that make any difference?

image.png

···

Le gach dea ghui,

Shane Carey
GIS and Data Solutions Consultant

Image attached shows rivers (black line) and floodplain of where it thinks there are rivers and in some cases where there may not be rivers.

Based on what we have discussed (including some off-list), the best shot seems to be using directions based on r.watershed on the carved DEM together with the given (not computed) streams for HAND (streams are also used for the carving and r.lake steps).

An alternative is using streams from r.watershed, but only those which fall into a buffer around the given streams (for more context, see some of my previous emails when I already mentioned this).

Getting the directions for a stream, as I suggested, is of course useless except for using it for updating the direction raster which may or may not bring a minor improvement (probably not worth complicating the workflow).

Vaclav

On Wed, Oct 3, 2018 at 5:46 PM Shane Carey <careyshan@gmail.com> wrote:

Hi Vaclav,

I have checked the output from r.watershed with what you have calculated and I do see differences in the value obtained by both. Could it be a rounding issue perhaps? The only other difference I see is that the output from r.watershed is a complete raster as opposed to just the river network. See image attached to explain what I mean. Does that make any difference?

Le gach dea ghui,
Shane Carey
GIS and Data Solutions Consultant

On Tue, Oct 2, 2018 at 12:07 PM Shane Carey <careyshan@gmail.com> wrote:

Ok cool. When I I try to run the r.stream.distance with this new new stream direction layer (that I calculated with r.mapcalc “streams_direction_8 = int((streams_direction + 45) / 45)” ),

it just hangs on the part that says: “caclulating downstream parameters”. So I am not sure what is going on here - have you any ideas on this?

Also, could you explain a little about what this expression is doing: (streams_direction + 45) / 45)

Thanks Vaclav

Le gach dea ghui,
Shane Carey
GIS and Data Solutions Consultant