We are trying to use slope distance (based on a DEM) for buffers on streams (lines). Seems like this should be fairly straight forward but we haven't been able to figure this out yet. Any suggestions?

We are trying to use slope distance (based on a DEM) for buffers on streams (lines). Seems like this should be fairly straight forward but we haven't been able to figure this out yet. Any suggestions?

- 2 people found this helpful
path distance is the only obvious solution that I can recommend...I see Sephe provided a link on stack.

The principle in general is to ascribe a 'cost' which represents the distance that a cell has with a certain slope. For example if the slope is 45 degrees and the cell width is 100, then the surface distance is sqrt(2) (1.414ish). So as the costs accumulate outward from a start location(s), all you would need to do is query for the cells that are within 200 ft and form a polyline from the boundary. So in short, a perfectly flat surface ... you can use 200 ft...for any other average slope, you can do the 'tan-a-roo' thing (rise/run etc), so an area with a 45 deg slope only, 200 ft downslope is going to represent a shorter horizontal distance. If you want it exact (using the concept loosely), then implement path distance, of do some profiles as the video suggests and base the analysis on 'close-ish' approximations. Anything more accurate...survey crew...maybe lidar will get you closer.

Darren...all angles in a right angle triangle, can be defines in terms of the 'rise', 'run' and 'hypoteneuse'

Example: Using soh cah toa | Basic trigonometric ratios |Khan Academy

not just for 45 degrees.

So how do you apply sqrt(2)? That doesn't seem to have anything to do with triangles other than right angles with two 45 degree angles, but it could be some trick of trigonometry I'm not aware of.

What I'm saying is, root 2 has nothing to do with slope distance (except if the slope happens to be 45 degrees). The formula you can apply to all cells to get the 3d distance across it, from one side to the other, is: (cell size) / cos(slope).

Given slope angle and cell size, you can't use rise/run anyhow, since a single cell doesn't generally have a rise value.

Hi Dale! How fun to see someone I know!

Have you seen this Stack Exchange question? arcgis desktop - Distance from rivers, taking into account terrain elevation - Geographic Information Systems Stack Exch… It might give you some starting points.

I also came across this video that might help: Calculating True Distance Over a Surface using ArcGIS - YouTube

So Dale.... back to you. Forgot to mention that the slope angle isn't even the 'correctest' one in the first place ... it is one of many variants...a topic for another time. Burrough (intro text) covers some, and terrain derivative variants appear in other software but not map For ArcGIS's implementation... see:

How slope works with some math and equation stuff

As you can see, does your buffer slope distance really represent a true downslope distance given that the slope itself is influenced by the surrounding cells and is not unidirectional??? Depends. I am sure by this point you realize that there is no correct way to do this except to determine the slope in the direction normal to what it is you are buffering and do the math thing. Neither path distance nor the profile tool is going to be exact...how close do you need to be?

It doesn't have to be extremely close since we are talking about natural resources and not engineering. The solutions discussed so far seem to be using slope from cell to cell. A better measure would be slope distance from the stream line to the outside of the buffer. Is that possible from the methods mentioned so far? There will be lots of variation between the beginning and ending point which is irrelevant for our output.

- 3 people found this helpful
This may get you some of the way there. The usefulness of this approach definitely depends on the relief in your AOI, as well as the resolution of your DEM.

1.) You'll need a DEM and stream elevation raster.

2.) Calculate Euclidean distance to streams. This is the horizontal distance (run).

3.) Calculate Euclidean Allocation to stream elevations. This extends the stream elevation outward from each stream cell.

4.) Subtract the allocation (stream elevation) from the DEM (rise).

5.) Use rise (a) and run (b) to calculate the cells that are your required distance away from the streams (c).

a^2 + b^2 = c^2

I chose 500m as my distance. Because my DEM was relatively coarse, I had to use a range of elevations from 490 - 510 in order to get a mostly complete buffer. My exact Raster Calculator expression was:

Con( (SquareRoot((Power("euc_dist",2))+(Power("str_el_diff",2))) >490) & (SquareRoot((Power("euc_dist",2))+(Power("str_el_diff",2))) < 510),1)

6.) Compare with flat 500m buffer.

A while ago I answered this thread on Creating a surface buffer? However, this is only based on a single point not a stream. Not sure if this has something to do with what you are looking for.

Can you elaborate, since they are three different processes of deriving output. Each on their own are simple, but in combination there is not a single tool. For example, for slope-distance are you referring to slope-length along the stream sense? If so, not quite as easy to obtain...clarification with an image of what you wish to accomplish would help.