I am trying to use the Viewshed Analysis plugin in QGIS to create what is sometimes known as an 'inverse viewshed' - essentially querying where I can see points from the ground, rather than where I can see the ground from points. (Same result as a viewshed, and usually the same GIS query, but just answering a different question.)

I have a raster DEM (ELEVATION RASTER), and a points shapefile (OBSERVATION POINTS) which contains a field denoting height above ground for each point.

My issue is that because I want to query which areas of the DEM my points are visible from, rather than the opposite way around, I want to set a viewer height on the ground of 2m (in effect adding 2m height to each sampled Z value point within my DEM).

I know this can be done in ArcGIS using OFFSETA / OFFSETB, but in the plugin in QGIS I only have the option to set the height of the observation points (which I have set to the field showing their height above ground).

Is there a simple way to do this?

Should I create an additional field in my points shapefile adding an additional 2m on to the current height above ground - resulting in an extra 2m on each point height but a 0m height on the ground - or will this give an erroneous result?

Should I create a new DTM 2m higher than the original?


It is very simple. Just set the target height (leaving the target points file field blank). This is the height above ground level that the observer is looking at. For inter-visibility, the target is defined by another point set, but otherwise, if no target points are specified, the target height is simply the height above ground level to look at. It is the equivalent of OFFSET B. So in your case set the target height to 2m and the observer height (equivalent to OFFSET A) to whatever is being looked at.

So let's say you are doing a viewshed of wind turbines. A 2m tall person looking up at a 100m turbine is the same as a 100m person looking down on a 2m turbine. Your turbines (say) are 100m tall and are defined by a point data set called myTurbines.shp. Set myTurbines.shp as the Observers and an observer height of 100m. Leave the target points blank but set the target height to 2m.

Do NOT make a DTM with an additional 2m height because if you add 2m everywhere it will make zero net difference to the visibility calculation.

| improve this answer | |

MappaGnosis' answer is right:

you set the Observer Height (Offset A) to the field containing the height of your points shapefile (OBSERVATION POINTS), and set the Target Height (Offset B) to a normal observer height (±1,75m).

But I find the answer a little misleading on its second paragraph, when it states that

"a 2m tall person looking up at a 100m turbine is the same as a 100m person looking down on a 2m turbine".

It is misleading because, without any extra information, you have an ambiguity problem related to LOCATION - where are the observer and the target located in both situations?

Let's see what it looks like when written on a slightly different way:

"A 2m tall person looking up at a 100m turbine is the same as a 2m turbine looking up a 100m person".

See the difference? We have two different scenarios, where the difference in writing might look subtle, but the difference in result might not be so subtle.

The first phrase suggests one scenario where both the observer and the target keep their original locations and only change their height.

The second one suggests a scenario in which observer and target change places, but height stays the same for each location.

And, as illustrated by Notkilroy in his answer to another visibility related question, only the second scenario is correct.

| improve this answer | |

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.