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

hmitaso at ncsu.edu hmitaso at ncsu.edu
Thu Mar 1 16:59:37 EST 2007


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 at gmail.com>
>> >> Subject: [GRASS-user] Re: stream network from DEM
>> >> To: Xiaoyan Li <xlia at gmu.edu>, grassuser at grass.itc.it
>> >> Message-ID: <200702261959.05473.dylan.beaudette at 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
>
>




More information about the grass-user mailing list