I'm having trouble understanding the method for creating a cartographic depth to water index and seek some guidance. I'm using ArcGIS Pro 2.3, but equally happy with ArcMap desktop.

The method is outlined in Murphy, Ogilvie and Arp (2009) "Topographic Modelling of Soil Moisture Conditions: A comparison and verification of two Models" European Journal of Soil Science 60, p. 94-109.

The model takes two inputs: streams and a slope grid. Excerpt from paper below:

"An iterative function finds the cumulative slope value associated with the least slope path from the cell in the landscape to a surface water cell. That is, the function explores each possible path from the cell in the landscape to a surface water feature across the slope grid and sums the cell slope values along those paths (cumulative slope values). The function takes account of whether the path crosses a cell parallel to the cell boundaries or diagonally by using a multiplier, a. Therefore, the path of least cumulative slope will be identified on the basis of both slope and distance, the cumulative slope value tending to increase with both for any possible path.

The cumulative slope value associated with the least slope path is then multiplied by the grid cell size (resolution) and assigned to the cell in the landscape. This is carried out for each cell. The result is a DTW grid, formally derived from:

enter image description here

where dz/dx is the slope of a cell, i represents a cell along the path, a is 1 when the path crosses the cell parallel to the cell boundaries and 1.414214 when it crosses diagonally and xc is the grid cell size [m].

Because the cumulative values over the whole path of axc and dx will be approximately equal, the index value approximates the elevation difference between the cell in the landscape and the hydrologic source cell (the cumulative value of dz over the whole path).

In this process, all surface water features (lakes, streams, rivers) are assumed to have a DTW value of 0. Lower values indicate wetter soils. Values tend to increase away from surface water features into the landscape, indicating drier soils. DTW increases more rapidly in steeper terrain (greater slope values) and more slowly in flatter terrain (smaller slope values).

So, from this, I understood the streams and slope to be inputs into a cost function and that the output is multiplied by the cell resolution. Firstly, I couldn't decide on whether cost or path distance would be better, and if using Path, in which input would the slope be best (i.e. cost raster?, surface raster? vertical factor?) Both seem to take account of the horizontal or diagonal travel mentioned in the paper.

However, I feel like there's more to it than that. Essentially the method is trying to calculate depth to the water table, and my results are looking nothing like that. The last two paragraphs are not making a lot of sense to me. What am I missing?

  • It looks like flow accumulation where weight/rainfall replaced by slope?
    – FelixIP
    Commented Jun 11, 2019 at 5:25
  • Thanks, will give that a try, but all of the documentation never mentions this as a method, and always states it as a cost function. Curious! Commented Jun 14, 2019 at 9:51
  • 1
    Flow direction IS backlink raster for cost surface - elevation.
    – FelixIP
    Commented Jun 14, 2019 at 20:53
  • I've tried the above, and the values are nothing like I'd expect if they are supposed to approximate the elevation difference between the river and the source cell. I feel like I've tried every permutation of flow and cost, and nothing is giving me the results I'd expect, unfortunately. Commented Jun 17, 2019 at 13:23
  • 1
    Have a look at Flow Distance tool available after 10.6 version. Alternatively search for HEight above nearest drainage.
    – FelixIP
    Commented Aug 6, 2019 at 21:41

2 Answers 2


I've also been hammering away at this process a bit to map wet areas using some additional information gleaned from this paper (available open source and on researchgate):

White, B., Ogilvie, J., Campbell, D. M., Hiltz, D., Gauthier, B., Chisholm, H. K. H., ... & Arp, P. A. (2012). Using the cartographic depth-to-water index to locate small streams and associated wet areas across landscapes. Canadian Water Resources Journal/Revue canadienne des ressources hydriques, 37(4), 333-347.

I used Cost Distance as opposed to Cost Path because the output is a continuous surface away from the source(s), where my sources are stream channels from a raster layer generated in Whitebox, and the cost raster is Slope. This is an example of one version of the output (currently experimenting with tweaking different parameters give the most meaningful results for my specific project):

Landscape showing stream channels (sources) generated from DEM: Landscape showing stream channels (sources) generated from DEM:

Landscape showing Cost Distance output/Cartographic Depth to Water: Landscape showing Cost Distance output/Cartographic Depth to Water:

Landscape with Depth to Water transparent to show how it matches up with wet areas: Landscape with Depth to Water transparent to show how it matches up with wet areas:

The initial outputs are promising, but the interpretation of the cost distance values are a little less straightforward - the cost values don't translate straight across to a depth per se; they are the accumulated distance values away from the source weighted by slope - from my understanding, it would be a bit of an iterative process of determining what thresholds you would use to define drainage classes (see page 337 in the article above - they classify their image into classes ranging from poor to well drained; they mention subtracting the layer from the DEM, but I tried this and the values were non-sensical). I imagine classes thresholds are somewhat dependent on the landscape you're working in and the resolution of your data.


I found the same thing! The equation in the publication simply expresses the standard cost surface function, so I couldn't see how they converted it to depth. My maths isn't the best, but I remembered that the height of a right angled triangle could be calculated from its slope and distance (SOHCAHTOA and all that).

Height = cell resolution * Tangent of Slope in degrees

The cost function accumulated all the slope values, and multipled them by the cell resolution, which essentially equated to the angle of the triangle multiplied by the Adjacent side of the triangle. The only bit that was missing was the Tangent. the Trig functions in the Raster Calculator expect angles to be in Radians rather than Degrees, so, another step was needed to carry that part out.

So, the ultimate steps were:

  1. Generate a Degree slope map
  2. Convert to radians in Raster Calculator: [SlopeDeg] * 0.017453 (equivalent of Degrees * Pi/180)
  3. Convert output to Tangent in Raster Calculator: Tan([SlopeRadians]) (these two steps could be integrated in a single equation: Tan([SlopeDeg] * 0.017453)
  4. Use the output as the cost raster in CostDistance from water sources.

It's still not entirely perfect, but the results look much better than before. I just need to think about how to average the slope rather than accumulate it, as I think that's the sticking point.

  • Did you managed the averaging problem? Would be nice if you share your solution ;-)
    – DrSnuggles
    Commented Mar 29, 2021 at 16:11
  • Do you find your DTW values vary significantly from 1 m DEM to 5 m DEM? My DTW values at one site is approximately 0.5 m DTW to line up with field verified wetlands but my 5 m DEM DTW lines up with wetlands when DTW = 0.2 m. Not sure if it is suppose to be like that, I thought DTW wasn’t really that scale dependent. I used the accumulated cost tool with SAGA…maybe that’s the issue?
    – Erioderma
    Commented Dec 26, 2021 at 17:16

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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