Generating Vertical Buffers

One of the more popular analyses I’m asked to perform for my clients is a viewshed analysis. Beyond simply identifying what areas of a town are visible from roads or other public viewpoints, I’m often asked to help identify, and sometimes rank, areas that are most worthy of protection. One way to help a town identify and evaluate these high priority vistas, is to identify prominent ridgelines and the areas around them that are susceptible to inappropriate development.
One way to mitigate the impact of development on highly visible ridgelines is to make sure new buildings do not break the horizon line – the point where the ridge visibly meets the sky. Since most local zoning codes restrict building heights to 35-40 feet (in my client towns, anyway), producing a vertical buffer of 40 feet helps to identify the areas susceptible to such an intrusion.
The steps to produce such a vertical buffer are not overly complex, but I have not found them readily available online. So, for your benefit (and my easy reference) I outline the process here.
(Note: I outline these steps specifically using ArcGIS 10. I’m sure it’s possible using other tools, but this is what I use most often in my daily work)
Begin with:

A DEM of your study area

This DEM must be an integer raster for one of the following steps, so start off by using the raster calculator.
(Arc Toolbox > Spatial Analyst Tools > Map Algebra > Raster Calculator)
Use the INT( “DEM” ) expression, where “DEM” is the elevation raster that you want to convert from a floating point to an integer raster.

Prominent ridgelines

Ridgelines are often generated using watershed boundaries, with extensive field checking to identify the more prominent features. For these calculations, the ridgelines must be in a raster format that includes the elevation of each raster cell. To convert a line-type ridgeline to a raster, first buffer the ridgeline to produce a polygon feature (I typically use a 20 foot buffer) and then use Extract by Mask.
(Arc Toolbox > Spatial Analyst Tools > Extraction > Extract by Mask)
Use the Integer DEM produced in the first step as the input raster, and the polygon buffer of the ridgelines for the feature mask data.

Generate the Euclidean Allocation of the Ridgeline Raster

This is where the need for an integer raster comes into play.
(Arc Toolbox > Spatial Analyst Tools > Distance > Euclidean Allocation)
Simply use the Ridgeline raster generated in the previous step as the input raster, and choose the elevation value as the Source field. This process will generate a new raster that covers the entire study area, with each cell holding the elevation value of the ridgeline raster that is nearest to it.

Generate the Vertical Buffer

Use the Raster Calculator to generate a vertical buffer of the ridgeline.
(Arc Toolbox > Spatial Analyst Tools > Map Algebra > Raster Calculator)
The expression will look something like this: “IntegerDEM” >= (“RidgelineEucoAllo”-12) where “Integer DEM” is the DEM produced in step 1, “RidgelineEucoAllo” is the Euclidean Allocation raster produced in step 3, and “12” is the height of the buffer you want to produce. In this case, the raster measurements are in meters, so using a buffer value of 12 results in about a 39 foot vertical buffer. This allows me to identify areas where there is the potential for a new building built to the maximum allowable height to break the horizon line.
Once the buffer is generated, there is usually some cleanup required. As you can see from these results, buffers are generated in areas not connected to the ridgeline areas we want to focus on, so I’ll delete these before moving on to the next steps in this town’s viewshed analysis.
I hope this is helpful, and as always, I welcome any comments and feedback.

Reader Comments

  1. Very interesting! Thanks for sharing your process steps. I just want to double-check that I’m understanding this correctly: the ridgelines shown in the second picture are features that have previously been created, right? Do your clients often already have that data or do you ever delineate those yourself?

    1. Thanks Gretchen. Yes, the ridgelines have to be created first. My clients almost never have ridgeline data available beforehand. That’s a whole process in itself, worthy of another blog post (or two). It’s another multi-step procedure involving generating watershed boundaries, and a lot of field work.

      1. I’m taking on that task now of generating the ridgelines and would love to see the method you’re talking about. Any plans to make that a feature of a future blog post?

  2. I have to ask: 40 feet? Isn’t that a little low? In these parts, when they measure wind speed for potential turbines, they don’t even bother taking measurements below 50 feet above surface. Don’t you people have trees over there?

    1. Hi Terry –
      The 40 foot measurement is due to the fact most zoning codes have a 35 or 40 foot building height limit. My evaluation in this particular instance is limited to identifying areas where a new residential building might break the horizon line along a prominent ridge. There is a lot of additional thinking that goes into the process after these areas are identified, including what kind of land cover exists on the site.

  3. Dear Don,
    First of all, thanks for the post! It´s really well explained even for someone such as myself with little GIS knowledge (I´m just and architect after all).
    I´d like to stress the implicit request from Gretchen about the method to determine the ridgelines. It´d be incredibly helpful right now.

  4. Hi Don,
    This seems to be exactly what I need. I have created watersheds for my county, with the result being to identify ridgelines in order to create a protected map overlay. Can I take those ridgelines and compute a 100 foot drop in elevation around them, thereby creating a map overlay of a buffer zone around ridgelines?

    1. Dave –
      Yes, that’s exactly how I use them.
      I usually also add in viewsheds from roads and other public access points, looking for overlaps between the two.

      1. Thanks Don. I’ve looked at it in the meantime, and I’m unable to buffer my ridgeline, so I not understand the process well enough. I’m going to blow away all the existing datasets and start with a blank application. If I can get this working, it will do exactly what I need. My GIS experience is ArcView 3.0 (really), so my learning curve has been an awakening…

  5. I was looking for a method of determining slope distance and came across this discussion. Is there a way to determine the slope distance using a similar method?

  6. Hi Don. I have a floodplain boundary that needs to have a vertical setback of two feet. Meaning, the boundary elevation is raised by two feet and this raised line when extended out to the ground becomes the buffer. What would be the best way to go about it?

  7. I was interested in assessing flood area of a stream channel. These methods work, but you have to change to addition in the final calculation. (DEM_int >= (eculideanlayer + 12)) gives you area above a stream.

Comments are closed.