As a river ecologist\geomorphologist you will likely want to segment the river centreline to aid in reach analysis such as: computing slope, analysing adjacent riparian or floodplain data, aggregating species or woody debris or summarize in-channel structures.  In all these examples you want a line that follows the channel which you can add attributes that feed into your analyses.

A typically work flow would be to dissolve the river polylines into a single line, sample along it and split by points.  Such approach requires you to create and maintain a separate simplified version of your river network often requiring manual intervention. You would also need the skills to edit a network to resolve features such as loops that would cause multi-part geometries.

This suggested workflow does not alter your base network, but the approach is affected by loops if you choose to leave them in. The reach creation tools are generic, you can create a reach anywhere for as many points as you wish. In this workflow you are exploiting the fact your points are a regularly spaced set of points so logically the end of one reach is the beginning of another.  If your network contains loops then gaps will occur between your segments, Read the warning and take note!

Warning Before you continue with this workflow it is recommended that you simplify your network by dropping loops, a workflow is discussed here. Loops will introduce illogical and unresolvable situations and these are discussed below.



Processing Task


You have created a single threaded network and generated spaced points, in this example they are 1Km apart. You are guided through this workflow as described on this page. The end result is a sequence of points following your channel as shown below.

Sampling results

1Km spaced points labelled with their distance from network mouth


These 1Km spaced points have been generated along a single-threaded channel. You feed these into the Create downstream reach for site tool setting the reach distance to 1Km, thus the end of one reach becomes the start of another downstream reach.

Downstream Reach tool


The result is a sequence of polylines each1Km in length segmenting the channel. An important "take home fact" is that these segments are a separate layer and not an edit of your base network.  They can be easily viewed or used in spatial analysis with other datasets.

Segmented channel

Downstream reaches are colour coded by their row ID. The red spaced points are labelled with their

distance from network mouth.  These segments can be used in further spatial analyses.


If you had ticked on the optional task Extract reach end points this would have created a separate point layer which you could use to query your DEM and then compute slope over the reach.  ArcPro has the useful tool Extract Values to Points that transfers the pixel value to the intersecting point, ideal for helping with computing slope. 

The problem with loops

Regardless of their origins (e.g. islands, anastomosing, braiding or artificial channels), loops recorded in a river network will cause illogical scenarios when traversing the network.  RivEX attributes distance from network mouth in an upstream direction.  Creating a downstream reach searches the network in a downstream direction.  In both cases the logic that searches the network uses the first row encountered in the table as the mechanism for making a choice when a bifurcation/divergence is encountered.  Thus a search downstream could follow a drainage ditch instead of the main channel as that just happened to be the first encountered polyline when querying the network table.

The sampling tool Generate spaced points across network uses the distance to network mouth to efficiently determine the sampling point's location in the wider network.  Thus its location is influenced by which polyline was traversed first when adding the distance to network mouth to the network.  The bias introduced by different branch lengths in a loop means that as sampling point locations are created on loops, one branch yields a consistent separation distance whilst the other becomes out of sync with its next upstream sampling point, yet itself is the correct distance from network mouth.  This confusing situation and its impact on segmenting a channel is illustrated below.

  • A loop in the network is highlighted by the dashed box, one side of the loop is clearly longer than the other as it has two sampling points, one at 26Km then 27Km.  Thus at the upstream end of the loop one branch has travelled 26.5Km whilst the other has travelled 27.2Km yet they have arrived at exactly at the same location within the network!

  • The next upstream point is labelled 28Km, so RivEX had travelled up the left-hand side of the loop (as you look at it) when creating the sampling point locations.

  • You would expect the downstream reach for the 28Km point to connect with the 27Km point but the algorithm chose the right-hand side because that was the first polyline it encountered in the table.

  • As the 28Km downstream reach fails to reach the expected (and non-existent) 27Km sampling point on the right-hand side a gap between the reaches is formed and this is evident as the base network shown as a light-blue dashed line is clearly visible.

  • As stated above the reach creation tools are generic and are not searching for another point downstream.  The suggested workflow on this page is exploiting the fact your points are regularly spaced and logically the end of one reach is the start of another, thus segmenting the channel.

Loop problem

Return to top of page