ArcGIS Blog

Field Operations

ArcGIS Field Maps

Estimate materials for a sandbag wall using ArcGIS Arcade

By Doug Morgenthaler

Flooding can be a dynamic, destructive force nearly everywhere on the globe.  Often temporary barriers are needed to divert water and protect people and structures from further damage.  Sandbag walls offer a way to construct barriers with relatively few materials almost anywhere.

Use ArcGIS Field Maps or ArcGIS Collector and ArcGIS Arcade to calculate the materials needed to construct a wall the size you need to provide sufficient protection.  You’ll know how many sandbags, how much sand, and (where needed) how much polyethylene sheeting.

Siting locations for a sandbag wall

Determining the location of a sandbag wall is usually best estimated in the field.  Local relief, soil composition, and other factors can influence where to construct a sandbag wall for maximum effect.  Using Field Maps or Collector, field workers can evaluate various sites and capture where they want to place the sandbag wall by walking the desired location and collecting a line feature using their GPS.  In addition, they can capture other information about the proposed wall, including the desired height of the wall and the type of construction.

Here’s an example of a line captured in Collector with some basic attribution to define the key characteristics of our sandbag wall.

Estimating materials

Once the location of the sandbag wall is defined along with the desired wall height we can calculate the necessary materials.  We’ll use the following information we captured in Collector:

  • Desired wall length – we’ll use the geometric length of our proposed sandbag wall.
  • Desired wall height – captured as an attribute of our proposed wall.
  • Wall type – captured as an attribute of our proposed wall.

There are two basic types of sandbag walls: a single stacked row of sandbags, or a staggered wall called a dike.  Based on the type of wall, different amounts of material are required to build the same size wall. We’ll need to have two different Arcade expressions that can be used to calculate materials based on the type of wall.

Estimating materials for a single stack wall

Let’s start with estimating the material needed for a single stack sandbag wall.

First, we need to determine the number of sandbags using the following Arcade expression.

// Replace with appropriate field for height 
var finishedHeight = $feature.FinishedHeight;

function SandbagsNeeded(wallHeight,wallLength) {

    // 3 sandbags per vertical foot of wall
    return Round((wallLength * wallHeight * 3),0);
}

// Determine number of sandbags needed based on proposed 
// length, desired finished height
return SandbagsNeeded(finishedHeight, 
    Length($feature,"feet")); 

Once we have the number of sandbags needed for our single stack wall, calculating the amount of sand needed to fill the sandbags.  For this purpose, sandbags are only filled about 1/2 full.  We can use the following Arcade expression to determine the amount of sand.

function SandNeeded(numSandbags){
    // Approximately 0.4cubic ft of sand per sandbag
    var yardSand = (numSandbags * 0.4) / 27;
    
    // Amount needed to largest cubic yard
    return (Ceil(yardSand, 0));
}

Estimating materials for a dike wall

Dike sandbag walls require significantly more material to construct.  We’ll need a different formula to estimate the number of sandbags required to construct this type of sandbag wall.

The standard dike wall is recommended to be 1.5x wider than the desired wall height.  In our case, we want a wall 3 feet high, so our width is 4.5 feet.  Using the length and width of the dike wall, we can use the following Arcade expression to calculate the number of sandbags.

// Replace with appropriate field for height 
var finishedHeight = $feature.FinishedHeight;

function SandbagsNeeded(wallHeight,wallLength) {
    
    // determine number of sandbags per foot of dike wall
    var numSandbagsFoot = ((3 * wallHeight) + 
        (9 * pow(wallHeight,2))) / 2;
    
    // calculate number using desired length
    return Round(numSandbagsFoot * 
        wallLength,0);
}

// Determine number of sandbags needed based on proposed 
// length, desired finished height
return SandbagsNeeded(finishedHeight, 
    Length($feature,"feet")); 

We can adapt the calculation used for the the single stack wall above for the amount of sand needed.

In addition, plastic sheeting is often used to cover the dike wall, protecting it from wave action or current flow.  We can estimate the amount of sheeting needed to cover the water-facing portion of the wall.


// Replace with appropriate field for height
var finishedHeight = $feature.FinishedHeight;

// assume length of dike base and top are equal
// e.g. straight line for dike wall
var embankmentCrestLength = Length($feature,"feet");
var embankmentToeLength = Length($feature,"feet");

function CalculatePolySheeting(wallLengthAtCrest,
    wallLengthAtBase,dikeHeight){

    // dike wall width is assumed to be 3x height
    var dikeWidth = dikeHeight * 3;        

    // calculate the slope of the embankment that needs 
    // to be covered (water side)
    var slopeLength = Sqrt(pow(dikeHeight,2) + 
        pow((dikeWidth / 2),2));

    // Assume dike wall top (crest) is one sandbag wide, ~1'
    var embankmentCrestWidth = 1;

    // calculate area to be covered on the side of the embankment
    var embankmentArea = (wallLengthAtCrest + 
        wallLengthAtBase) / 2 * slopeLength;

    // determine area of the crest of wall to be covered. 
    // Assume one sandbag in width (~1')
    var crestArea = wallLengthAtCrest * embankmentCrestWidth;

    //compute total area
    return Ceil(embankmentArea + crestArea,0);
}

return CalculatePolySheeting(embankmentCrestLength,
    embankmentToeLength,finishedHeight);

Putting it all together

Now that we can calculate the sandbags and sand needed for our types of sandbag walls, let’s combine these into a single Arcade expression, and use our wall type to determine which calculation to use for the sandbags.

// Replace with appropriate fields for height 
// and type of sandbag wall
var finishedHeight = $feature.FinishedHeight;
var sandbagType = $feature.SandbagType;

function SandBagsNeeded(wallHeight,wallLength,wallType) {
    
    // sandbag wall types
    // single stack = 0
    // dike == 1 
    If(wallType == 0){
        // 3 sandbags per vertical foot of wall
        return Round((wallLength * dikeHeight * 3),0);
    }
    else {
        // determine number of sandbags per foot of dike wall
        var numSandbagsFoot = ((3 * dikeHeight) + 
            (9 * pow(dikeHeight,2))) / 2;
        
        // calculate number using desired length
        return Round(numSandbagsFoot * 
            wallLength,0);
    }
}

// Determine number of sandbags needed based on proposed 
// length, desired finished height, and wall type
return SandBagsNeeded(finishedHeight, 
    Length($feature,"feet"), sandbagType); 

We’ll also modify our polyethylene sheeting expression to only calculate this material for a dike wall.

// Replace with appropriate fields for height and wall type
var wallType = $feature.SandbagType;
var finishedHeight = $feature.FinishedHeight;

// assume length of dike base and top are equal
// e.g. straight line for dike wall
var embankmentCrestLength = Length($feature,"feet");
var embankmentToeLength = Length($feature,"feet");

function CalculatePolySheeting(wallLengthAtCrest,
    wallLengthAtBase,wallHeight){

    // dike wall width is assumed to be 3x height
    var wallWidth = wallHeight * 3;        

    // calculate the slope of the embankment that needs 
    // to be covered (water side)
    var slopeLength = Sqrt(pow(wallHeight,2) + 
        pow((wallWidth / 2),2));

    // Assume dike wall top (crest) is one sandbag wide, ~1'
    var embankmentCrestWidth = 1;

    // calculate area to be covered on the side of the embankment
    var embankmentArea = (wallLengthAtCrest + 
        wallLengthAtBase) / 2 * slopeLength;

    // determine area of the crest of wall to be covered. 
    // Assume one sandbag in width (~1')
    var crestArea = wallLengthAtCrest * embankmentCrestWidth;

    //compute total area
    return Ceil(embankmentArea + crestArea,0);

}

If(wallType == 1)
    return CalculatePolySheeting(embankmentCrestLength,
        embankmentToeLength, finishedHeight);
Else
    return "-";

Now that we have our material Arcade expressions in place, we will add them to our pop-up so that we can see the materials needed for each sandbag wall.

Let’s collect a new proposed dike wall in Collector.

Collecting Sandbag Wall

The Arcade expressions are processed immediately in Field Maps or Collector once the new sandbag wall is submitted, so material calculations are available even when working in areas with no internet connectivity.

Want to try this yourself?  Save a copy of this map and open in Field Maps or Collector.

More information

Sandbagging techniques (US Army Corps of Engineers)

 

Share this article