[GRASS-user] Re: stream network from DEM based on topographic curvature

Hi, Michael

> In ArcInfo, If DEM data is g, do the following:
> /*get flow direction, gfdir is the flowdirection grid
> gfdir = flowdirection(g)

=aspect (r.slope.aspect or r.param.scale or calculated from r.mapcalc)

> /*get curvature, gcurv is the curvature grid
> gcurv = curvature(g)

=profile curvature (r.slope.aspect, or r.param.scale)

> /*threshold curvature, gcthresh is thresholded grid of curvature, cells with
> curvature > 0.03 will be set 1, otherwise will be set to nodata. here using
> 0.03 as an example
> gcthresh = con(gcurv > 0.03, 1)

do in r.mapcalc, using curvature map from r.slope.aspect/r.param.scale

> /*the above grid is a 1 or nodata grid that should represent the streams but
> may be broken segment, to connect them, do the following
> gfacc = flowaccumulation(gfdir,gcthresh)

Multiple ways of getting flow accumulation (r.terraflow, r.flow,
r.watershed). Choose your algorithm and optimization parameters
depending on your problem.

> /*set stream grid to 1 on nodata background
> gstrm = con(gfacc > 10, 1)

I'm not sure what the con() function is in this statement. Probably you need
an r.mapcalc statement here.

> Is there any other command to calculate flowaccumulation in GRASS which
> function is the same as FLOWACCUMULATION in ArcInfo?
> FLOWACCUMULATION(<dir_grid>, {weight_grid})

As I indicated above, there are multiple algorithms for calculating flow
accumulation. They are well-documented (as opposed to at least some of the
algorithms in Arc*).

r.watershed also will automatically generate a stream network for you as one
of its output options.

So there are three algorithms(r.watershed, r.terraflow, r.flow) for calculating flow accumulation. The question is how to transfer two parameters "flow direction" and "thresholded grid of curvature" (gfdir and gcthresh) when using one of them, for example r.watershed?
Or there are other algorithms except above?
I had tried and succeeded extracting stream network from DEM using above three algorithms. However, someone ask me help derive stream network based on topographic curvature just like what he had implemented in ArcInfo.

thanks!

>> ------------------------------
>> Date: Mon, 26 Feb 2007 19:59:05 -0800
>> From: Dylan Beaudette <dylan.beaudette@gmail.com>
>> Subject: [GRASS-user] Re: stream network from DEM
>> To: Xiaoyan Li <xlia@gmu.edu>, grassuser@grass.itc.it
>> Message-ID: <200702261959.05473.dylan.beaudette@gmail.com>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> On Sunday 25 February 2007 07:38, Xiaoyan Li wrote:
>>> hi,Dylan,
>>>
>>> I searched the following discusses about flow accumulation calculations on
>>> Internet. http://grass.itc.it/pipermail/grassuser/2006-May/034150.html
>>> http://grass.itc.it/pipermail/grassuser/2006-February/032744.html
>>
>> Hi!
>> Apologies for the late reply. Those messages should have some good
>> hints on calculating flow accumulation.
>>
>>> Do you think it is possible to do the same thing in GRASS asextracting stream network
>>> via detection of curvatures from DEM?
>>
>> It might be, but I am not the one to tell you how to do it. You
>> might have to contact some of the developers like Helena for the specifics.
>>
>>> I tried to do the same using following commands:
>>> Filling DEM: r.fill.dir
>>> Calculating tangential curvature: r.slope.aspect
>>> Thresholding tangential curvature surface: r.mapcalc (?guess)
>>> Thinning the result grid to get network segments: r.thin
>>> Run flowaccumulation function with network segments as weight to
>>> connect stream segments: r.watershed or r.flow or r.terraflow
>>> Weight to connect stream segments? r.mapcalc (?guess)
>>
>> Seems like you are on the right track, but again I am not a
>> hydrologist and do not have a lot of time to investigate further.
>>
>>> I don't know about hydrology. Someone ask me help to implement this in
>>> GRASS. I am in a bit of quandary here:
>>> How to threshold tangential curvature surface?
>>> How to weight to connect stream segments?
>>>
>>
>> Try asking again, but with a more concise description of a part of
>> the problem. Simple questions -- easier for more to answer.
>>
>> Cheers,
>>
>> --
>> Dylan Beaudette
>> Soils and Biogeochemistry Graduate Group
>> University of California at Davis
>> 530.754.7341

You just combine the curvature and flowaccumulation and whatever
else you want to threshold in r.mapcalc (use accum output from r.watershed
rather than stream output which is already cutoff)- you should be able to
write a single r.mapcalc expression for all steps.
make sure you handle the nulls correctly and you get good curvatures and
you should get what you need. If your curvatures are too noisy try
v.surf.rst with low tension and high smoothing for curvatures.

Helena

Hi, Michael

> In ArcInfo, If DEM data is g, do the following:
> /*get flow direction, gfdir is the flowdirection grid
> gfdir = flowdirection(g)

=aspect (r.slope.aspect or r.param.scale or calculated from r.mapcalc)

> /*get curvature, gcurv is the curvature grid
> gcurv = curvature(g)

=profile curvature (r.slope.aspect, or r.param.scale)

> /*threshold curvature, gcthresh is thresholded grid of curvature,
cells with
> curvature > 0.03 will be set 1, otherwise will be set to nodata. here
using
> 0.03 as an example
> gcthresh = con(gcurv > 0.03, 1)

do in r.mapcalc, using curvature map from r.slope.aspect/r.param.scale

> /*the above grid is a 1 or nodata grid that should represent the
streams but
> may be broken segment, to connect them, do the following
> gfacc = flowaccumulation(gfdir,gcthresh)

Multiple ways of getting flow accumulation (r.terraflow, r.flow,
r.watershed). Choose your algorithm and optimization parameters
depending on your problem.

> /*set stream grid to 1 on nodata background
> gstrm = con(gfacc > 10, 1)

I'm not sure what the con() function is in this statement. Probably you
need
an r.mapcalc statement here.

> Is there any other command to calculate flowaccumulation in GRASS
which
> function is the same as FLOWACCUMULATION in ArcInfo?
> FLOWACCUMULATION(<dir_grid>, {weight_grid})

As I indicated above, there are multiple algorithms for calculating flow
accumulation. They are well-documented (as opposed to at least some of
the
algorithms in Arc*).

r.watershed also will automatically generate a stream network for you as
one
of its output options.

So there are three algorithms(r.watershed, r.terraflow, r.flow) for
calculating flow accumulation. The question is how to transfer two
parameters "flow direction" and "thresholded grid of curvature" (gfdir and
gcthresh) when using one of them, for example r.watershed?
Or there are other algorithms except above?
I had tried and succeeded extracting stream network from DEM using above
three algorithms. However, someone ask me help derive stream network based
on topographic curvature just like what he had implemented in ArcInfo.

thanks!

>> ------------------------------
>> Date: Mon, 26 Feb 2007 19:59:05 -0800
>> From: Dylan Beaudette <dylan.beaudette@gmail.com>
>> Subject: [GRASS-user] Re: stream network from DEM
>> To: Xiaoyan Li <xlia@gmu.edu>, grassuser@grass.itc.it
>> Message-ID: <200702261959.05473.dylan.beaudette@gmail.com>
>> Content-Type: text/plain; charset="iso-8859-1"
>>
>> On Sunday 25 February 2007 07:38, Xiaoyan Li wrote:
>>> hi,Dylan,
>>>
>>> I searched the following discusses about flow accumulation
calculations on
>>> Internet.
http://grass.itc.it/pipermail/grassuser/2006-May/034150.html
>>> http://grass.itc.it/pipermail/grassuser/2006-February/032744.html
>>
>> Hi!
>> Apologies for the late reply. Those messages should have some good
>> hints on calculating flow accumulation.
>>
>>> Do you think it is possible to do the same thing in GRASS
asextracting stream network
>>> via detection of curvatures from DEM?
>>
>> It might be, but I am not the one to tell you how to do it. You
>> might have to contact some of the developers like Helena for the
specifics.
>>
>>> I tried to do the same using following commands:
>>> Filling DEM: r.fill.dir
>>> Calculating tangential curvature: r.slope.aspect
>>> Thresholding tangential curvature surface: r.mapcalc (?guess)
>>> Thinning the result grid to get network segments: r.thin
>>> Run flowaccumulation function with network segments as weight to
>>> connect stream segments: r.watershed or r.flow or r.terraflow
>>> Weight to connect stream segments? r.mapcalc (?guess)
>>
>> Seems like you are on the right track, but again I am not a
>> hydrologist and do not have a lot of time to investigate further.
>>
>>> I don't know about hydrology. Someone ask me help to implement this
in
>>> GRASS. I am in a bit of quandary here:
>>> How to threshold tangential curvature surface?
>>> How to weight to connect stream segments?
>>>
>>
>> Try asking again, but with a more concise description of a part of
>> the problem. Simple questions -- easier for more to answer.
>>
>> Cheers,
>>
>> --
>> Dylan Beaudette
>> Soils and Biogeochemistry Graduate Group
>> University of California at Davis
>> 530.754.7341