I am currently working on attributing nodes along some stream polylines. The attribution is supposed to include: 1)length of the stream from it's reference point 2) the location of the node in relation to its reference point - upstream/downstream) 3) either a road crossing or a stream confluence, whichever is closest. This will be the reference point.

I am trying to find a way to automate this process (if possible) because I need to attribute somewhere around 2,000 points.

My question is, how would you go about doing this?

Here is what I have conceptually worked out so far:

  • I need to attribute each stream node to the closest either road or confluence point. For this I would do a Spatial Join and set the Match Option to "Closest"
  • Once the segments are attributed then the Locate Features Along Routes tool can be applied to gather the length of the segment to its initial point/vertex (determined by the initial attribution)
  • The direction (upstream/downstream) can be determined by the directionality of the way the line was drawn

The main problem I see with this process is that I will be doing a Spatial Join to the node and it will be joining the closest node and not to the confluence point on the river or closest road, which will not give me the correct length once I run the Locate Features Along Routes tool.

enter image description here

Here is why I don't think my concept is working yet: When looking at Rock Creek Tributary 12, the node at 9th Street should be referencing 9th Street, since it is closer. But the node right by the confluence should be referencing the confluence point with Rock Creek. I am not entirely sure how to be sure that the nodes will be attributed to the closest either confluence or road.

  • It's not clear what you are talking about, except for sources/mouths the only other nodes of a river network are tributary junctions, bifurcations and pseudo nodes, so why would a spatial join not find a confluence point, unless you are talking about pseudo nodes (but didn't actually say it)? May be you should edit your question with an image of what you think will fail?
    – Hornbydd
    Dec 18, 2017 at 23:27
  • The first step would be identifying and separating the confluence points from the other nodes. A possible test would be that the node intersects 3 stream lines. It's not clear what you mean by 'closest road or confluence point'. Does that mean closest road first, and if not available then find the closest stream confluence - or does it mean the closest of the two options (road or confluence). You would need to analyze the distance from every node to the closest road. Then analyze the distance from every node to the closest confluence. Compare the two and keep the nodes with shortest distance.
    – jbalk
    Dec 19, 2017 at 7:24
  • Once you've done that look at creating a network so you can determine upstream/downstream nodes.
    – jbalk
    Dec 19, 2017 at 7:25
  • 1
    @Hornbydd I will edit the question to (hopefully) help make some clarifications. Thanks. Dec 19, 2017 at 14:18
  • @jbalk That is a good idea, identifying the confluence points would help. But how would I use that in the analysis? I think I have an information gap with regards to that. And by "closest road or confluence," there is no heiarchy, just whichever point is closer. Dec 19, 2017 at 14:25

1 Answer 1


An approach is this:

  • Identify the nodes of your river network which have a valency of 3 or more, these will be your tributary junctions. If you don't understand what valency is, suggest you look at this tool.
  • Save these out, add a new field and tag as river.
  • Extract the nodes of your road network, add a new field and tag as road.
  • Merge the two above point datasets.
  • Run your spatial join of all river nodes against the merged dataset.
  • That makes total sense conceptually. Thank you! I will run through that as soon as I get the chance, but it sounds like it will work. Dec 19, 2017 at 21:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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