Is there a tool or module, or multiple tools, in ArcGIS that will allow you to automate the creation of points around the outer edges of a viewshed?

What I am trying to do is gather data about the elevations on the farthest parts of a viewshed. If I have points, then I can extract the elevation values to the attribute table and then do rise/run calculations from the original point to possibly create a horizon diagram in something like excel.

Is this possible?

  • The points you want are different than the in_observer_features? – artwork21 Apr 22 '13 at 1:08
  • 5
    Consider converting your viewshed to polygons and then run Feature Vertices to Points on the polygons. For a more exact solution, use the editor toolbar to create regular points along a polyline delineating the viewshed. – Aaron Apr 22 '13 at 1:14
  • 2
    A zonal max of elevation by aspect of negative distance to the observer, as masked by the viewshed, produces a table of (bearing, elevation) pairs; plotting it will show the horizon without any further calculation. – whuber Apr 22 '13 at 1:53
  • 3
    @Aaron It is difficult to determine what a "polyline delineating the viewshed" might be, given that many viewsheds are highly irregular, disconnected features. – whuber Apr 22 '13 at 14:40

A profile of the horizon plots the apparent elevation of the land-sky demarcation against the direction of view (the "azimuth").


In this plot the "adjusted altitude" measures the angle of view (shown as 1000 times its tangent). It was obtained from a DEM by first computing the viewshed for a 20 meter fire tower at a location near the middle:


This hillshaded DEM has been colored with standard terrain colors (blue=low, browns and grays=high) and masked to the viewshed. The tangent of the view angle can be found by subtracting the tower's altitude from the original DEM and dividing the results by the distance. Here is an unmasked, hillshaded version. The largest changes (relative to the original DEM) occur near the observer location, of course:

Angle of elevation

The final calculation needs to collect the maximum viewing elevation in all directions. Because we have already computed the distance grid, the viewing directions can be obtained simply by computing its aspect:

Aspect of distance

These are angles ranging from 0 to 360 degrees. Partition them into discrete ranges of viewing angles. A simple calculation will do: for instance, take the integer part to obtain one-degree ranges. Finally, a zonal maximum (making sure to use only the viewing elevations and aspects as masked to the viewshed) produces a table of the results:

Zonal max table

These are the data plotted at the beginning of this answer (adjusted by 180 degrees because the aspect of a distance grid is the reverse of the actual bearing of the point of view).

To recapitulate, the calculations are:

  1. The viewshed itself.

  2. A Euclidean distance grid for the observer location.

  3. A relative elevation (that is, a subtraction) divided by the distance grid to give the viewing elevation.

  4. The aspect of the distance grid.

  5. A discretized version of the aspect grid to create zones.

  6. A zonal summary of the viewing elevation (zones are aspects).

All but the first--which is already available in the question--are fast operations, convenient to perform even on enormous DEMs.

When computing the viewing elevation, you could compensate for the earth's curvature and the refraction of light through the atmosphere by decreasing more distant elevations by a quadratic function of the distance, thereby obtaining a realistic profile of what is actually seen. See "Curvature and Refraction Corrections" in the ArcGIS Spatial Analyst help.

  • 1
    Thanks! This is a great start for me. How did you create the horizon plot shown above? Is that something in ArcGIS? Is there a way to extract the values from the plot? Specifically the altitude and its corresponding azimuth? – CodeSpatial Apr 22 '13 at 16:32
  • 1
    The plot was made from the data shown in the final table as the [Value] and [Max] fields. Any software that will make a plot from (x,y) data will work; this one was made by Mathematica. – whuber Apr 22 '13 at 16:34
  • 1
    Ok, I see. How do I do the calculations mentioned in "3", "5", and "6" in ArcGIS? I understand why they are necessary, but just not sure on the execution. – CodeSpatial Apr 22 '13 at 16:44
  • 2
    I put hyperlinks to the help system within the recapitulation for you. – whuber Apr 22 '13 at 16:52
  • 1
    Is that an ArcView 3.3 table I'm looking at? Awesome! :) – Hornbydd Dec 14 '13 at 16:12

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.