I have an ArcGIS question that is either very easy or impossible (my favorite kind). I am somewhat inexperienced when it comes to dealing with network analysis, so maybe I'm missing something major here.
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 ArcHydro 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 ArcGIS 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, & 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, & add up their populations.
Is anything like this at all possible? I would greatly appreciate any insight! Thanks!
(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 & hope that it's been placed correctly, use Trace Upstream to select the features connected to that mouth, extract those, & count up the populations of the watershed polygons they intersect with. Now if there was 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)
Answer
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):
- Dissolve your river network by subwatershed ID, then assign the population value to that river reach.
- 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.
- 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.
- 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).
- Aggregate the results from each run into a table, where each river reach (=subwatershed) will have the sum of upstream population assigned.
No comments:
Post a Comment