I used the GRASS gis module to design catchment area with a minimum size of 2 kmsq. However, I would like to know if, in addition to the minimum size, I can limit a maximum size of 5 kmsq for them. In GRASS GIS, SAGA GIS or ArcGIS ...
No out of the box solution, but can be done with some Python. I am using following workflow:
- Select cells with high flow (smaller than target size) from flow accumulation raster
- Sample Row, Column, Flow Direction, Flow Accumulatio rasters using above as location
- For each row in Sample table compute next Row, Column downstream
- Construct directed graph from Sample table, with edge attribute "Flow"= Flow accumulation in the cell
- Iterate through graph edges. If edge flow >=target AND flow in incoming edge(s) < target, the cell is your discharge node.
- Subtract flow at discharge from all edges down stream.
- Remove edges upstream from graph
- If there are edges left in a graph, go to 5, break otherwise (add sink to the list of discharge nodes)
Due to nature of stream network the size for some subcatchments will differ from target, but overall you'll be very close: