I am carrying out a study which aim is to come up with a list of priority obstacles to fish migration to be removed based on those where more extra habitat would be created after the modification.

I have a river network and the location of some dams, and I would like to know the length of the river available upstream of each dam up to the next obstacle. I need to obtain the total length not only of the main river, but also the tributaries for each dam.

enter image description here

The dams are the blue points and I would like to obtain the total length of the river reaches within the boxes. Some of the points aren't on the river itself (precision of the dam location might not be great) so a buffer of 100m should be applied to link them to the nearest river. I am using the OS Open Rivers Network, but I also have the OS Water Network if that helps at all.

I have tried the Network analyst but it hasn't quite worked. The example below shows some of the issues:

  • I would manually have to identify start and end points for each of the obstacles, and there are over 5000 of them, so I would like to automate the process.
  • It measures the distance between nodes rather than the points I have specified, so it includes some river downstream from the first dam, and it doesn't go all the way to the upstream obstacles.
  • Some reaches are completely missing.

enter image description here

I have tried to add the obstructions into the nodes info as "Pseudo" in category but when I created the geometric network, but it returned 1000s of errors. Some of them are type 11 (feature's geometry has multiple parts), but most of them are type 16 (junction isn't connected to any other edge feature). I don't get any of these errors when I use the original Hydronode.

Is there another way to include the obstructions into the Hydronodes that doesn't create?

I have had a look at the geometric network editor, but I would have to change every point individually or could it be done in bulk?

Could it be possible to create a network using the obstructions only as "Pseudo" or does it need junctions, outlets and sources?

I also have a polygon river layer and I would like to know not only the river length upstream of a dam, but also the river area, which can be translated into habitat available to fish. This is because it would be more beneficial to remove a dam in a river 10m wide than only 2m wide. However, this last point isn't as critical as obtaining the river length at least.


RivEX does much if not all of what you are asking. For computing upstream length you would run the appropriate RivEX attribution tool to encode that into the network then transfer the lengths to your dam points which you would have snapped to the network using RivEX snapping tool. The process of transferring ensure the correct length is computed.

You should be aware that the OS Open Rivers is a generalised dataset so will not have many first order streams. Earlier versions of it also had topological issues but I don't know if they have been fixed. RivEX has a suite of quality control tools for identifying these. You would run your network through those first and correct the issues. This is critical to any network analysis as a break in the network will disconnect entire sub-catchments.

As for your issue with area you could use a proxy like stream order for width, which of cause RivEX can create, or use the segment ID tables it can create to run relates, select up the networks and use that to select you river polygons. Be aware this is more of a manual approach.

I think reading your question the key issue is ensuring that the river network you are using is topologically correct.

If you don't want to use RivEX you could look into using Arc Hydro which has many tools but I've not used it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.