I am using ArcMap and I am somewhat inexperienced when it comes to dealing with network analysis.

I have a stream network covering a very large area & some census data. My problem is: I want to take each of the highest-order river mouths and associate a population value with it, which will tell you "here's how many people live in the drainage area derived from this pour point".

I understand the usual way to do this would be to delineate catchments using Arc Hydro or Spatial Analyst Hydrology tools, which I've done many times (then I could associate said catchments w/ census data). In this case, however, the area of interest is huge, and the processing time for even one raster operation seems to be far longer than is acceptable.

Since I can't imagine that there's any way to delineate catchments w/o involving raster processing, I'm wondering if there's a way to do something like the following rough workaround:

Given a feature class of pour points, have ArcMap go through each pour point & determine the upstream river network. I also have a separate shapefile of watershed polygons for the area, with associated population attribute. Then, tracing down the network to the river mouth, it could tell when the network crosses a polygon boundary, and then "add" the population of the new watershed it has entered to the subsequent downstream reach. So, it'd be kind of like a weighted flow accumulation, except the "cells" would be large watershed polygons, and it would need to know, as it traces along the network, when it's crossed into a new one. By the time it reaches the mouth, it will have tabulated the total populations of all the polygons the network has passed through.

In the following image: One river mouth of interest is circled in red (there would be hundreds of these, probably). The higher-order streams are selected in turquoise just for more visual clarity. Basically, I just want to see how many of the watershed polygons upstream the network leading to that mouth propagates through, and add up their populations.

River network and watersheds visual aid

Is anything like this possible?

One non-automated way to do what I want is to put a flag at the river mouth using Utility Network Analyst, cross my fingers and hope that it's been placed correctly, use Trace Upstream to select the features connected to that mouth, extract those, and count up the populations of the watershed polygons they intersect with. Now I need a way to automate doing this hundreds of times. Unfortunately I don't know how to access that toolbar via ArcPy or automate things that require human clicking.


3 Answers 3


Assuming your river network and watershed boundaries are really clean and hydrologically correct, something along the lines of the following procedure might work. I have only sketched this in my head, so this might need some creative adjustment (with python):

  1. Dissolve your river network by subwatershed ID, then assign the population value to that river reach.
  2. The dissolved river network will be used to create a geometric network (hopefully your flow directions are correct); use the population number as a network weight.
  3. Convert the dissolved river network (from step 1) and convert the polylines to points. These will be individual flags you use in an iterative model.
  4. Use the ModelBuilder and iterate through the points (flags) and run the trace network tool ("Find upstream accumulation") at each iteration (these tools are exposed in 10.1 under Data Management -> Geometric Networks).
  5. Aggregate the results from each run into a table, where each river reach (=subwatershed) will have the sum of upstream population assigned.

This could be done quite easily with RivEX and then using a simple model. One of the attribution tools in RivEX is to encode each catchment that drains to the sea with a unique ID.

Then you cycle through each ID (in a model you make), select all polylines for that ID and use that selection to select you polygon layer, then you can sum up your population field.

If you want to do this at a sub-catchment level, this is also achievable with RivEX as another tool creates tables which lists all polylines upstream of a polyline. So this logic would be get ID of polyline that pour point intersects, selects rows with this ID in the table that RivEX creates and then relate that selection to the network which can then be used to select your polygons. I give an example of using this table and relating selections here.


I will assume you are in the United States and you working at a scale of 100k or smaller. I'm really rusty on this stuff, but it might be worth looking at NHDPlus, National Hydrography Dataset Plus, because it is a dataset that, for the entire United States, already has "catchment" polygons built that are associated with stream "reach" vectors (again, already built) through common identifying attributes.


Particulary page 74 of the current user guide, "Building an NHDPlusV2 Attribute Accumulator." might get you what you want.


Good luck!

  • Thanks! Unfortunately this is Canadian data. But I hadn't run into the "attribute accumulator" guide before & I'm sure I'll be needing to do this with NHD data in the future.
    – user14175
    Oct 18, 2013 at 13:27

Your Answer

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

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