[GRASS-user] [GRASS GIS] #1924: r.watershed - empty stream segment map

Markus Metz markus.metz.giswork at gmail.com
Tue Jun 4 12:29:01 PDT 2013


On Tue, Jun 4, 2013 at 11:00 AM, Johannes Radinger
<johannesradinger at gmail.com> wrote:
> Thank you Markus,
>
> thats really a profound answer perfectly solving the problem. I've tested
> it, and
> it is smoothly working in GRASS65. Just the variables for r.patch in python
> are input and output instead of in and out....

Only shell supports option abbreviation. Sometimes shell is easier
(and faster to type).

The procedure I suggested will not work in all situations. Sometimes
it might be necessary to create a buffer, and then set the start point
(cumulative costs = 0) to NULL instead of modifying the buffer. This
will create segments leading up to the start point, but excluding the
start point.

Markus M

>
> cheers,
> /johannes
>
>
> On Mon, Jun 3, 2013 at 9:49 PM, Markus Metz <markus.metz.giswork at gmail.com>
> wrote:
>>
>> On Mon, Jun 3, 2013 at 3:30 PM, Johannes Radinger
>> <johannesradinger at gmail.com> wrote:
>> > Hi Markus,
>> > Hi others,
>> >
>> > I am coming back to the topic of running r.watershed on a rasterized
>> > river
>> > network.
>> >
>> > As recommended I buffered now my river raster. This river raster is a
>> > thinned distance raster
>> > with increasing values from the outlet to the branches (calculated via
>> > r.cost) and as
>> > I said it is buffered now with a very large value (2 x max of the
>> > thinned
>> > distance raster).
>> >
>> > So actually this should work as an input map to r.watershed. And it does
>> > more or
>> > less perfectly: There's just one issue concerning the outlet-stream
>> > segment.
>> > Somehow this (in my case small segment, in the south-west corner) is
>> > missing
>> > in the stream-map output of r.watershed.
>> > I am working on GRASS6.5. Attached there is a zipped GTIFF with the
>> > "pseudo-elevation" map
>> > (this thinned and buffered distance raster) I am using as input to
>> > r.watershed.
>>
>> There is another error in the north-eastern part where a stream
>> segment extents into the buffer area. The reason for these artefacts
>> is that r.watershed does not know where the outlet is because all
>> river segments are inside the buffer. In this case, the outlet is the
>> starting point of r.cost which has in the river raster the value 0.
>> You could produce the desired output with
>>
>> # buffer
>> r.grow.distance input=river_raster value=river_raster_nearest
>>
>> # get value of nearest river cell
>> r.grow input=river_raster output=river_raster_grow radius=2.01 old=1
>> new=100000
>>
>> # remove buffer for start point
>> r.mapcalc "river_raster_grow_start = if(river_raster_nearest == 0,
>> null(), river_raster_grow)"
>>
>> # grow by one cell to make sure that the start point is the only cell
>> of the river bordering a NULL cell
>> r.grow input=river_raster_grow_start output=river_raster_buffer
>> radius=1.01 old=100000 new=100000
>>
>> # path river raster with buffer
>> r.patch in=river_raster,river_raster_buffer out=buffered_distance_raster2
>>
>> # get stream segments
>> r.watershed -s --overwrite elevation=buffered_distance_raster2
>> stream=test_segments threshold=3
>>
>> HTH,
>>
>> Markus
>>
>> >
>> > The command I am using is:
>> > r.watershed -f --overwrite elevation=buffer_river_raster
>> > stream=test_segments threshold=3
>> > The threshold has been set to 3 as this is the number of raster cells
>> > that
>> > refer to the buffer (3 x resolution)
>> >
>> > Can anyone reproduce that the outlet small river segment is missing in
>> > the
>> > produced "test_segments"??
>> > What is causing that?
>> >
>> > /Johannes
>> >
>> >
>> >
>> >
>> >
>> > On Wed, Apr 10, 2013 at 12:37 PM, GRASS GIS <trac at osgeo.org> wrote:
>> >>
>> >> #1924: r.watershed - empty stream segment map
>> >>
>> >>
>> >> -----------------------+----------------------------------------------------
>> >>  Reporter:  jradinger  |       Owner:  grass-dev@…
>> >>      Type:  defect     |      Status:  new
>> >>  Priority:  normal     |   Milestone:
>> >> Component:  Raster     |     Version:  svn-trunk
>> >>  Keywords:             |    Platform:  Linux
>> >>       Cpu:  x86-32     |
>> >>
>> >>
>> >> -----------------------+----------------------------------------------------
>> >>
>> >> Comment(by mmetz):
>> >>
>> >>  Replying to [comment:2 jradinger]:
>> >>  >
>> >>  > Two more important things:
>> >>  > 1) The elevation input map is accutally already a thinned river
>> >> raster.
>> >>  The raster
>> >>  > values represent a pseude elevation which  was generated with r.cost
>> >>  from the source.
>> >>  > Thus the value (elevation) is increasing upstream. r.watershed is
>> >> just
>> >>  used for getting
>> >>  > the flowdirection and segmenting the river raster. (if needed I can
>> >>  provide the elevation-rcost
>> >>  > raster)
>> >>
>> >>  r.watershed expects a surface as input. Using a thinned river raster
>> >> as
>> >>  input should give weird results: all non-NULL cells face at least one
>> >> NULL
>> >>  cell treated as unknown elevation, thus flow direction can not be
>> >>  unambiguously determined. You can try to place a buffer around the
>> >> rivers
>> >>  and fill the buffer with pseudo-elevation values larger than the
>> >> largest
>> >>  cost value. For example, create a buffer using 300 meter (3 cells) as
>> >>  distance, set a pseudo elevation value for the buffer zone, patch the
>> >>  thinned river raster with the pseudo elevation, run r.watershed with
>> >>  threshold=3. Works for me.
>> >>
>> >>  > And maybe a warning/error message should be printed when threshold =
>> >> 0,
>> >>  instead of the (for me confusing error)
>> >>
>> >>  Makes sense.
>> >>
>> >>  Markus M
>> >>
>> >> --
>> >> Ticket URL: <http://trac.osgeo.org/grass/ticket/1924#comment:3>
>> >> GRASS GIS <http://grass.osgeo.org>
>> >>
>> >
>> >
>> > _______________________________________________
>> > grass-user mailing list
>> > grass-user at lists.osgeo.org
>> > http://lists.osgeo.org/mailman/listinfo/grass-user
>> >
>
>


More information about the grass-user mailing list