Getting subbasin area of each specified river segment?

I would recommend that you use the (free) extension ArcHydro Tools. It's got a lot more features and ways to tweak your results than the built-in functions.

There is a document here for 10.1 which outlines possible workflows. Although it's a bit different than in 10.0, it should give you a good starting point to get the idea of the software.

Unless you want to take sinks into account, you can start out as you already did (but you have to do it again with these functions to keep consistency). Try using the functions in this order:

  1. Fill sinks
  2. Flow direction
  3. Flow accumulation
  4. Stream defintion
  5. Stream segmentation
  6. Catchment grid delineation
  7. Catchment polygon processing
  8. (Drainage line processing)
  9. (Adjoint catchment processing)

Watch out in step 4, that is where you indirectly define the size of your catchments by the threshold value. Each stream segment will then get a catchment on it's own, so this might (should) require some trial and error to get right.

EDIT: After installing ArcHydro tools you activate them just like any other toolbar (right-click in the grey area around the existing toolbars): enter image description here

Then you use the Terrain preprocessing group: enter image description here


I would use a simple model to iterate over each point, snap to the flow accumulation grid then compute the catchment. This would create a raster for each sub-catchment point. The model would be:

model for building catchments


Check out these two step by step guides from my old lecturer on using arcmap to extract river profiles / drainage basins from DEMs, they're excellent!

http://www.geos.ed.ac.uk/homes/mattal/Topo1.pdf

http://www.geos.ed.ac.uk/homes/mattal/Topo2.pdf

Basically you need to create 'pourpoints' at the base of each river segment you want to calculate the watershed for, it's pretty simple using hydrology tools.