Thursday, July 24, 2014

ArcMap volume methods for small features

Over the years I have calculated volumes for various features. This tutorial will deal with tips for trying to calculate the volumes of dunes. This is more a manual method than a automatic batch method for many dunes and is more applicable to features found in high-resolution data sets like HiRISE DEMs and LROC DEMs.

There are several methods in ArcMap to do this from just using image statistics to tins, terrains, profiles, etc.  For example, in batch, you can do "zonal stats to table" to get the mean elevation (or other parameter) for each digitized dune polygon and then times the returned mean by area of dune (using a table join). However, this would be very much an approximate for the dune's volume.
Again I will explain manual methods for ArcMap users who have the 3D Analyst extension. (1) calculate volume for a dune on a flat surrounding surface (2) calculate volume from a sloped surface.

Tip: For HiRISE, if the orthophoto doesn't register to DEM see:,3729.msg14926.html#msg14926 or you can try fix_jp2.
Tip: Example for testing download the DEM and full-res Ortho:
1) Calculate volume for a feature on a flat surface.

1.1) Create an empty polygon file for dunes (ideally in Feature Class or maybe just a Shapefile)

1.2) Once all dunes are bounded by polygons, select single polygon, export to graphic:
--Turn off polygon layer and select graphic using standard black arrow tool
--With single dune graphic selected, Right click on DEM - Export to clip DEM
(method 2 easy):

1.3) With clipped DEM, now run "Surface Volume" from Toolbox (requires 3D Analyst):
--Done, volume reported in output table in m3

2) calculate volume from tilted surface

Summary: The idea here is to clip out dune from DEM, interpolate across dune hole in DEM (using one of several methods available) , then use "cut fill" tool to subtract dune from tilted interpolated-over dune hole.

optional tip: Using a graphic box with bounds dune with a little buffer, clip DEM to smaller DEM with Dune and some extra. Or at any processing stage you can set the processing extent to the "Current Display" if zoomed in or another layer with the bounding extent.

Do the same steps 1.1 and 1.2 above.

2.3) From 1.2, again select same single dune graphic, Right click on DEM – Export to clip DEM (but use "outside" to create dune hole).
more clipping help:

2.4) convert created DEM (dune hole) to multi-points:

2.5) run Create Tin with points. This will fill the hole with Tin triangles - spanning the gap – making a generally very flat surface where the dune use to be.

2.6) Convert Tin back to raster which should return a new DEM with again the flatten and tilted surface where to dune was.

2.2.7) Run "Cut Fill" on "1.2" (polygon clipped dune DEM) and "2.6" (hole-filled DEM).
--Open resulting table for new raster layer and select the largest volume in the table. The volume will again be m3.
No example pictures added just yet but I will try.


  1. I think This news is very interesting, I hope you feel same like me about my blog visit @ ball volume calculator
    know more

  2. Sir, i'm writing an arcpy script right now follow your step. Here is my step:
    # Clip raster with polygon
    clipped_raster = str(uuid.uuid4().hex) + ".tif"
    arcpy.Clip_management(Elevation_Raster, "#", clipped_raster ,Input_Polygon_Shp, "0", "ClippingGeometry")

    # Convert clipped raster to multipoint
    poly_boundaries = str(uuid.uuid4().hex)
    arcpy.RasterToMultipoint_3d(clipped_raster, poly_boundaries)

    # Create tin from multipoint
    poly_tin = str(uuid.uuid4().hex)
    arcpy.CreateTin_3d(poly_tin, sr, poly_boundaries, "delaunay")

    But i got stuck in the create tin step since it's always produce the error message:
    arcgisscripting.ExecuteError: ERROR 999999: Error executing function.
    Failed to execute (CreateTin).

    Can you give me some idea about this problem