This is somewhat related to a previous question I asked: What Algorithm is used by ArcGIS Watershed tool?

I was wondering if there is a more efficient way to calculate catchment areas if you are interested only in the polygon defining the catchment area (rather than all cells contributing to the catchment area). Doing a recursive search seems very expensive and would return a lot of information we don't want (namely each cell within the area).

Assuming the same starting point - a raster grid and a pour point/outlet (I leave it open for now whether the raster is a DEM, Flow Direction or Flow Accumulation).

My first thought was to simply follow the 'steepest path' upstream of the outlet point, which would quickly take us to the 'edge'. But I could not think of a way to follow the 'edge' around.

Are there any other possibilities?

  • 1
    If you haven't already, you should also take a closer look at ArcHydro Tools, which I use for catchment delineation and watershed analysis. – Martin Jan 28 '14 at 8:37
  • You have mentioned that you are interested only in the polygon defining the catchment area (rather than all cells contributing to the catchment area) Can you expand on the difference between these two? I do not think that there is a difference. – Devdatta Tengshe Jan 28 '14 at 8:51
  • @ Martin. I'm interested in the theory and computation, not a read-to-use tool. In any case, those tools use search methods – James Jan 28 '14 at 9:20
  • @ Devdatta. Polygon is a vector simply defining the boundary of the catchment. The other is a collection of all cells which make up the catchment area. You could also think of the polygon as those cells which define the boundary of the catchment only (i.e. not the inner cells), if you want to keep it as raster data. – James Jan 28 '14 at 9:20

I am not sure that following the boundary will be more efficient than expanding the area. With raster data, you need to account for the number of times that you "go through" the entire image. With a region growing method, each pass will process an increasing number of pixels until you reach the boundary. If you look at the contour only, you might end up with more passes because your neighborhood does not expand.

That being said, to give you a hint for your idea, you could use the definition of a ridge pixel : a pixel which could contribute to more than one watershed. So you can use an edge detection filter to identify the closest pixels to the zero value of the slope, and those would be potential ridges (with holes and artefacts, especially if you don't have a "smooth" DEM, but if you are lucky you can use a threshold to identify your ridges in two passes). Then you link those ridges using some "edge segmentation" methods in order to "close" your polygon. The methods used for edge based segmentation could help you find a solution to the specific case of watershed.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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