Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have an elevation raster and I would like to get some basic terrain variables, such as slope, ruggedness, aspect or curvature.

The problem is that I don't seem to have the possibility to calculate curvature with the terrain analyst:

enter image description here

Can anyone tell me why this indicator isn't in the list? How can I calculate it otherwise?

Thanks for your help

share|improve this question

Curvature is a complex terrain derivative to compute, the equation that you use depends on the resolution of your input data, as you have to ensure that the curvature results you compute can be distinguished from noise in the data.

A lot of research has been done recently on curvature calculations on high resolution LiDAR data which showed that a scaling break exists at around 2 or 3 metres resolution and above this point more different algorithms (which I am not as familiar with) need to be used. The best information about calculating topographic curvature probably comes from Hurst et al 2012 and the references therein.

The basic principle of curvature calculation, as with slope and aspect, is to pass a moving window over the elevation surface and fit the elevation values to a 6 term polynomial function, the coefficients of which will yield the slope, aspect and curvature of the centre cell of the moving window.

ArcGIS uses a 3x3 search window which will only yield good results in areas completely devoid of vegetation, which makes the tool fairly useless unless people are aware of this limitation, this may suggest why it is not present in QGIS.

The maths was derived originally (I think) in Evans (1980) and was simplified in a few pages in Principles of Geographical Information Systems (Amazon link) which I can recommend as a good guide to this kind of terrain analysis at a basic level.

One way to calculate curvature of a DEM is to convert the DEM into an ascii raster, read it into a numpy array and then perform the polynomial fitting on a moving window passing through the data. This is fairly easy to do, but is very slow to execute and needs a fair amount of optimization (these kind of operations often get ported to c++ to speed them up).

To perform the operation in QGIS you can use the GRASS plugin r.slope.aspect which is also limited by the 3x3 fixed window.

I realize this is not the simple answer you were doubtless hoping for, but I hope you understand that curvature is complex to derive in a meaningful way. All the best.

Evans, I. S. (1980), An integrated system of terrain analysis and slope mapping, Z. Geomorphol., 36, 274–295.
share|improve this answer
Thank you for all the development! However, I was intrigued by the fact that the "Curvature" option is missing from the list in the raster terrain analyst of QGIS. Is is normal? I reinstalled my version of QGIS 1.8 to be sure, but it still isn't there :-/ – Damien Oct 18 '12 at 13:51

ESRI's version of Raster Analysis for calculating curvature might be helpful to develop a plugin for QGIS.

For each cell, a fourth-order polynomial of the form:

enter image description here

Z = Ax²y² + Bx²y + Cxy² + Dx² + Ey² + Fxy + Gx + Hy + I

is fit to a surface composed of a 3x3 window. The coefficients a, b, c, and so on, are calculated from this surface.

The relationships between the coefficients and the nine values of elevation for every cell numbered as shown on the diagram are as follows: Curvature values diagram Curvature values diagram

A = [(Z1 + Z3 + Z7 + Z9) / 4 - (Z2 + Z4 + Z6 + Z8) / 2 + Z5] / L4

B = [(Z1 + Z3 - Z7 - Z9) /4 - (Z2 - Z8) /2] / L3

C = [(-Z1 + Z3 - Z7 + Z9) /4 + (Z4 - Z6)] /2] / L3

D = [(Z4 + Z6) /2 - Z5] / L2

E = [(Z2 + Z8) /2 - Z5] / L2

F = (-Z1 + Z3 + Z7 - Z9) / 4L2

G = (-Z4 + Z6) / 2L

H = (Z2 - Z8) / 2L

I = Z5

The output of the Curvature tool is the second derivative of the surface—for example, the slope of the slope—such that:

Curvature = -2(D + E) * 100

Full Information and source:

share|improve this answer
This is a great summary of the maths, but it can be simplified to use a 6 term polynomial with no discernible loss in quality, if your data has a resolution of below 3 meters. – sgrieve Oct 18 '12 at 13:43
Because the ESRI "curvature" depends only on D+E, all the rest is unnecessary. Computing -2(D+E)*100 as (100/L2)*(3*Z5 - [Z2+Z4+Z6+Z8+Z5]) shows how to obtain this value as thrice the original value, Z5, minus a neighborhood sum Z2+Z4+Z6+Z8+Z5 (using a radius 1 circle), all rescaled by 100/L2. That's just three simple grid operations. – whuber Oct 18 '12 at 15:02
@whuber: Can anyone tell me what is x and y? and is Z represents the value of curvature? then what is -2(D+E)*100? Is it possible that if i have a vector file having so many polygons and i want to know weather the area inside the polygon is concave or convex(plan and profile curvature)? – Hardik Mar 7 '13 at 13:39
Z = Elevation Value and -2(D+E)*100 = Curvature Value (Osculating_Circle) – Mapperz Mar 7 '13 at 14:46

The curvature could be calculated using SAGA's module 'Terrain analysis - Morphometry ---> Slope, Aspect, Curvature'

The calculation could be done based on one of these algorithms:

  • Maximum Slope (Travis et al. 1975)
  • Maximum Triangle Slope (Tarboton 1997)
  • Least Squares Fitted Plane (Horn 1981, Costa-Cabral & Burgess 1996)
  • Fit 2.Degree Polynom (Bauer, Rohdenburg, Bork 1985)
  • Fit 2.Degree Polynom (Heerdegen & Beran 1982)
  • Fit 2.Degree Polynom (Zevenbergen & Thorne 1987)
  • Fit 3.Degree Polynom (Haralick 1983)
share|improve this answer

You can also try free SAGA GIS ( or TAS (

share|improve this answer
Can you provide more detail on how these packages operate to calculate curvature? The links you have posted are general links to two GIS packages, and have no direct relevance to the question asked. – sgrieve Oct 24 '12 at 8:22
Sorry for very short answer. In SAGA you can find module Terrain Analysis - Compound Analyses --> Standard Terrain Analysis. There you can calculate curvature, profile curvature, plan curvature (there is no detailed description inside software help). You can import data into SAGA easy from asc, flt, ... – Rok Oct 25 '12 at 9:34
@sgrieve In TAS you can calculate profile, plan and tangential curvature (menu: Terrain Analysis-->Primary Terrain Attributes-->Surface Derivatives). Again, there is little description how it works. – Rok Oct 25 '12 at 9:43

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.