Tracing up a stream network & tabulating attributes of polygons it passes through

Are you in the United States? Are 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!

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.

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 model builder 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.