[GRASS-user] Directed vector networks (e.g. river networks)

Markus Metz markus.metz.giswork at gmail.com
Fri Jun 14 13:39:34 PDT 2013


On Fri, Jun 14, 2013 at 4:18 PM, Johannes Radinger
<johannesradinger at gmail.com> wrote:
>
>
>
> On Fri, Jun 14, 2013 at 11:59 AM, Markus Metz
> <markus.metz.giswork at gmail.com> wrote:
>>
>> On Fri, Jun 14, 2013 at 11:03 AM, Johannes Radinger
>> <johannesradinger at gmail.com> wrote:
>> > Hi,
>> >
>> > as I am not very familiar with GRASS' vector capabilities maybe someone
>> > of
>> > you has some ideas. Is there the concept of directed vector networks e.g
>> > describing river networks with flow direction implemented in GRASS?
>>
>> r.stream.extract produces a vector network with the direction of the
>> lines corresponding to the flow direction.
>> >
>> > I am looking for a way that counts all barriers when routing from a
>> > starting
>> > point in the network And I'd like to get the number of barriers that are
>> > downstream and those that are upstream a given point. Or is there a way
>> > to
>> > "cut" a network into two parts where one is automatically detected as
>> > upstream while the other one is declared as the downstream network?
>>
>> Maybe the linear referencing system can help to count barriers.
>
> Thank your for that info. I am totally unfamiliar with the LRS system, so
> I'll look into
> that and do some reading... :)

Maybe r.cost could also work: set stream segments to zero and barriers
(barrier cells must be on the stream network) to 1. Cumulative costs
would then be equal to the number of barriers.
>
>>
>>
>> For separate upstream/downstream analysis, you could use vector
>> network analysis tools and make use of the line direction: if want to
>> go only upstream, set forward costs to -1, if you want to go only
>> downstream, set backward costs to -1.
>>
> What tool of vector network analysis tool are you thinking of? can you given
> an
> example, e.g. to extract the enitre network upstream a given point?

v.net.alloc:

Add two columns to the vector network table (layer must be the layer
of the lines), one for line length, one for blocking. Upload lline
length to the column for line length, Set the blocking column to -1.
Run v.net.alloc, use the length column as forward cost as the blocking
column as backward cost. This should give you the network downstream
of the given point. Using the length column as backward cost as the
blocking column as forward cost should give you the network upstream
of the given point.

>
>
>>
>> >
>> > Furthermore I am interested in calculating stream order for such
>> > dendritic
>> > networks. I saw the v.strahler add on, is there also an add on that
>> > calculates other types of stream order (here I am most interested in a
>> > vector based Shreve's stream order like as already implemented in
>> > r.stream.order).
>>
>> You could use r.stream.extract to produce both a raster and a vector
>> river network, then run r.stream.order on the river raster and update
>> the attributes of the vector with the desired order using v.what.rast.
>
>
> Yes I also thought of using the really nice r.stream.* toolbox, although it
> is
> somehow inconvinient to transform to and from raster/vector just to get the
> network topological factor "stream order". Theoretically, from a directed
> e.g. stream
> network that does not include "cycles" it should be possible to generate a
> stream
> order map, but probably that needs quite some knowledge abouot GRASS'
> network
> system and programming skills. Maybe a future add-on :)

You don't need to transform to and from raster/vector. Ask
r.stream.extract to produce both a raster and a vector output, then
run r.stream.order on the river raster and update the attributes of
the vector with the output of r.stream.order using v.what.rast.

Markus M


More information about the grass-user mailing list