# Creating 1-sided buffer that varies with slope in ArcMap?

I am a forester using ArcMap 10.5. I need to map the riparian management zone (RMZ) along a river that I have delineated using lines for each shoreline of the river. I have 2 foot contour interval maps created using LIDAR data, and I know how to create polygons using those contour lines where the polygons show the slope percentages classified using a classification scheme that I define. The RMZ needs to be 100 feet wide from each side of the river with the 100 feet measured along the slope, not horizontal distance.

I know how to create a one-sided buffer using an Arc Tool, but is there a way to attach a slope attribute to the line as it passes through each of the slope polygons?

Then I could create another column in the attribute table and calculate the horizontal (mapping) distance that corresponds to 100' along the various slope percentages.

Then, is there a way to have the buffering tool vary the width of the buffer based on that horizontal distance in the attribute table?

I am guessing a Python script might perform the last step but I don't know how to use Python.

Raster based solution that will get you very close to your goal:

``````arcpy.gp.Slope_sa("dem", "../SLOPE", "DEGREE", "1")
arcpy.gp.RasterCalculator_sa("""1.0/Cos(3.141593*"SLOPE"/180)""", "../COST")
arcpy.gp.CostDistance_sa("STREAMS", "COST", "../TOTAL")
arcpy.gp.RasterCalculator_sa("""Con("TOTAL" <= 25,1)""", "../one")
``````

Output compares horizontal 25 m distance buffers with "true" length 25 m buffers: Perpendiculars to streams are labelled by their 3D length.

If you have an advanced licence then you have all the tools to do this.

1. Create the polygons first. You'll need them for processing the lines and buffer. I am assuming the buffer distance will be an attribute of the polygon.
2. Intersect the shoreline and the buffers, set the output to point.
3. Use the tool 'Split Line at Point' using the shoreline as the line and points from the intersect as the points.
4. With your new split line, perform a spatial join with the slope polygons. For the match option, use 'Have their center in'. This step joins the polygon attributes to the split lines (this is how you get the slope and buffer distance attributes transfered to the lines).
5. Create your buffer - the buffer tool has options for line side and buffer distance. Choose the appropriate line side (left or right). For the buffer distance, tick the option 'Field'. This tells the buffer tool to use a field to obtain the distance. Specify the distance field as the buffer distance.