To be a valid river network polylines must connect to each other only at their nodes.  A network can fulfil this requirement yet still have polylines that intersect each other along their length.  RivEX is capable of searching within a network for all intersections.

The output of this process is a text file with all polyline ID numbers where an intersection occurs.  RivEX tests for intersections that do not occur at a node.  It is up to you the user to correct the errors.

As RivEX has to test every polyline for an intersection, a large network (20,000+ polylines) can take several minutes to process.

The below image demonstrates 3 intersections typically observed in river networks.

Intersecting polylines

How you deal with the intersection depends upon the type of intersection that is occurring.  It may be a simple matter of entering edit mode and deleting a single vertex if it is a self-intersection.  Alternatively you may have to split the polyline, snap the intersection to the new node and re-run RivEX to rebuild node IDs and any attribution you have done.

These types of errors are often over looked as the connectivity of the network is not compromised.  They do influence other types of processing.  For example, if you use RivEX to build a pseudo node free network then such intersections will cause multi-part features to be created when the GIS attempts to union the polylines for removing the pseudo nodes.

This tool generates an error log file called Intersections.txt