I would like to calculate the volume of material lost from a scarp like the one shown in the following image:

enter image description here

Is there a way to do these calculations with open-source software such as GMT, QGIS and GRASS?

  • Erase contours inside them and triangulate what remains. Difference of DEMs will give you very rough idea of individual volumes.
    – FelixIP
    Oct 21, 2017 at 23:10
  • thanks, a first idea is to mask the scarp area and then triangulate that area, right?
    – Gery
    Oct 22, 2017 at 15:02
  • GRASS GIS offers a volume calculator in grass.osgeo.org/grass72/manuals/r.volume.html
    – markusN
    Oct 23, 2017 at 6:30
  • Do you have a before and after raster?
    – Fezter
    Oct 24, 2017 at 5:18

2 Answers 2


I will try to address your question with GRASS.

Your problem has a first task that is a bit challenging already, which is to get the situation before the event you want to quantify. I think the best option is to produce a raster of the original situation. To produce it, I would use some countour lines to draw "by hand" the terrain as it was before the event, then with the help of r.surf.contour fill a terrain model.

Once you have the two rasters, before and after, you ca produce a raster of the difference with r.mapcalc (rasterDiff= rasterBefore - rasterAfter). I guess you will need appropiate masks to box your areas of interest.

You can have the volume by using the r.sum of rasterDiff and multiplying the results by the cell size.


@Gery provided a working example offshore Nicaragua and I attempted to calculate the volume with my own description above using GRASS and bit QGIS.

 |        Projection: Latitude-Longitude                                  
 |            N: 11:15:44.273502N    S: 10:55:46.447629N   Res: 0:00:02.76634 |
 |            E: 87:04:08.435069W    W: 87:23:22.390832W   Res: 0:00:02.80086 |
 |   Range of data:    min = -4783.09  max = -760.2788                        |`

Here an overview of the scarp around 3000 m below sea level

  1. Load the DTM and set the region to the input data

    r.import input=mb.grd output=mb g.region raster=mb

  2. Digitalize the contourlines before the slide. I did the digitalization in QGIS and I saved the elevation values in field level

    v.import input=Contour50_WGS84.shp layer=Contour50_WGS84 output=Contour50_WGS84

Contour lines before the slide

  1. Digitalize the boundaries of the scarp to use it as a mask.

    v.import input=mascara.shp layer=mascara output=mascara


  1. Mask the area of interest and fill the null values

    r.mask --overwrite vector=mascara r.fillnulls input=mb output=mbfilled method=rst

  2. Conversion of contour lines into raster lines and interpolation for the DTM prior the slide

    v.to.rast input=Contour50_WGS84 type=line output=prescarp use=attr attribute_column=level r.surf.contour input=prescarp output=prescarpfilled

enter image description here

  1. Calculate the difference between the two rasters

    r.mapcalc expression=scarpdepth = prescarpfilled - mbfilled

enter image description here

  1. Calculate the average cell size and the sum of the scarpdepth

    r.report map=MASK units=me |-----------------------------------------------------------------------------| | Category Information | square| |#|description | meters| |-----------------------------------------------------------------------------| |1|Value 1. . . . . . . . . . . . . . . . . . . . . . . . . . . | 53,830,997| |*|no data. . . . . . . . . . . . . . . . . . . . . . . . . . . |1,235,078,890| |-----------------------------------------------------------------------------| |TOTAL |1,288,909,887| +-----------------------------------------------------------------------------+

    r.univar map=scarpdepth total null and non-null cells: 178396 total null cells: 170947 Of the non-null cells: ---------------------- n: 7449 minimum: -2.60534 maximum: 387.981 range: 390.586 mean: 206.303 mean of absolute values: 206.305 standard deviation: 76.9735 variance: 5924.92 variation coefficient: 37.3109 % sum: 1536751.12633864

Then, with 7449 cells and an area of 53.8 km^2, the cell size is 7226 m^2/cell

  1. The volume is +/-11 km^3 approximately (7,226 m^2 * 1,536,751 m)
  • thanks for your answer, would you show a minimal working example please?
    – Gery
    Oct 24, 2017 at 14:45
  • @Gery, it is going to take a while to give it the required time, but it is still fun. Do you have a nice scarp to share?
    – Marco
    Oct 25, 2017 at 7:09
  • I think I have one, where can I upload it for you?
    – Gery
    Oct 26, 2017 at 18:07
  • I think pasetbin is a good place to share a working example. I have just pasted a small clip from the srtm_22_20.tif as a plain ascii file here pastebin.com/tzYPBDSE. Any public place, if it is not already public data, would be fine
    – Marco
    Oct 27, 2017 at 8:50
  • sorry it took me a while to share the grid with the nice scarp, please find it here: ufile.io/3i2ix
    – Gery
    Nov 2, 2017 at 0:59

I am trying to calculate the volume of ore that has been excavated in an open-pit mine, using QGIS and GRASS. I used the same method suggested here except for the step 7.

To calculate the volume of a raster, maybe you could use r.volume in GRASS. It does the same thing as explained here, but there are no intermediate results which are rounded up, so I think it is more precise!

I used the two methods to compare the results. I found that there could be tens of meters of difference up to ten-thousands of meters of difference, depending on how you round your results. So maybe it is worth using r.volume instead.

Hope that helps!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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