ArcGIS Blog

Field Operations

ArcGIS Field Maps

Earthwork calculations from a surface using ArcGIS Field Maps

By Jeff Shaner and Morgan Zhang

A surface is a digital, three-dimensional representation of terrain created from elevation data such as survey points, contours, or imported terrain models. Surfaces are foundational elements in design systems like Civil 3D, enabling designers to visualize, analyze, and manipulate the land for civil engineering projects.

Accurate elevation and alignment measurements in the field and in Civil3D
Accurate elevation and alignment measurements in the field and in Civil3D

Surfaces often represent existing ground conditions or proposed grading, and serve as a base for further design elements like roads, sites, and utilities. The primary type of surface used for construction operations is a TIN (Triangulated Irregular Surface) that is made up of non-overlapping triangles, efficiently storing data and providing variable detail based on the density of input points.

In the field, a Construction Inspector can use a surface to:

  • Verify earthwork and grading – surfaces are used to compare the actual site grading using MSL values from a GNSS receiver in Field Maps with the design surface. By referencing the surface, they can check if cut and fill operations match planned elevations and contours.
  • Checking Elevations and Slopes – the surface provides detailed elevation data at any point, allowing inspectors to verify that constructed features-such as roads, pads, or drainage swales-are built at correct heights and slopes.
  • Locating Features and Boundaries – surfaces help inspectors locate and stake out design features like road centerlines, edges, or utility corridors. Using a surface in Field Maps, inspectors can accurately position themselves and verify construction locations in real time.
Compare current elevation against a design surface.
Compare current elevation against a design surface.

This article provides a guided workflow for exporting a surface to a polygon layer with accurate elevation values and necessary Arcade expressions needed to accurately capture elevation values in Field Maps and compare those values with the surface geometry. It does not include the configuration required to accurately capture an MSL elevation value using an external GNSS receiver. Please reference documentation from your GPS provider on how to download and use an appropriate geoid model to capture orthometric heights.

Exporting a TIN surface from Civil 3D to a polygon feature layer

To use a surface in Field Maps, you need to publish a polygon feature layer from the surface used in Civil 3D. This involves the following steps.

Within Civil 3D, Click Output > Export to LandXML and export the surface you would like to bring into the field.

Export surface to LandXML format
Export surface to LandXML format

Use the LandXML to TIN Geoprocessing tool in ArcGIS Pro to create a TIN surface that ArcGIS can recognize.

Use ArcGIS Pro to convert LandXML to Tin
Use ArcGIS Pro to convert LandXML to Tin

Use the TIN Triangle Geoprocessing tool to convert from a TIN to a polygon feature class comprised of triangles.

Convert the TIN to a triangle polygon layer
Convert the TIN to a triangle polygon layer

Note: the current LandXML to TIN GP tool doesn’t convert coordinate system from LandXML. The Define Projection tool is needed to assign back its coordinate system information.

Finally, publish the polygon feature class as a read-only hosted feature layer in your organization and add it to your web map as a reference layer.

Calculating elevation from the surface

The TIN Triangle polygon layer, added to your web map, is used as reference layer. Using Calculate expression at Form with an editable layer, the elevation result at any given location of the surface is computed and stored.

Add the following calculated expression to your editable feature layer to get elevation from the TIN surface via TIN triangles:

//Create a feature set using the TIN layer in the map 
var triangle = FeatureSetByName($map, airport_surface_TinTriangle)

// Set the spatial reference of the webmap. Ideally spatial reference of basemap and feature layer are the same 
var mapWKID = 32618 

// Intersect the current feature location with the TIN triangles and get the first triangle 
var firstTriangle = First(Intersects($feature, triangle)) 
var testpoint = Geometry($feature

if (!IsEmpty(firstTriangle)) {
// Get 3 vertices of the intersected TIN triangle 
var rings = Geometry(firstTriangle).rings
var vertex_0 = rings[0][0];
var vertex_1 = rings[0][1];
var vertex_2 = rings[0][2];

// With additional test point, it creates 3 sub triangles inside the original TIN triangle
// Create 3 those three sub-triangles 

var triangle_0 = Polygon({
rings: [
[ vertex_1,vertex_2,testpoint
],
],
spatialReference:{wkid:mapWKID }
});
var triangle_1 = Polygon({
rings: [
[ vertex_0,vertex_2,testpoint
],
],
spatialReference: { wkid: mapWKID }
});
var triangle_2 = Polygon({
rings: [
[ vertex_1,vertex_0,testpoint
],
],
spatialReference: { wkid: mapWKID }
});
// use barycentric coordinates to interpolate Z value at the test point.
var interpolatedElevation =
(vertex_0[“z“]*AreaGeodetic(triangle_0)+vertex_1[“z“]*AreaGeodetic(triangle_1)+vertex_2[“z“]*AreaGeodetic(triangle_2))/AreaGeodetic(firstTriangle)
return Round(interpolatedElevation,3

} else {
return null
}

With the elevation of TIN surface result, if needed, you can compare it with the orthometric height from GNSS receiver. To capture orthometric heights, please view this shared tip in our Tips from The team video series.

Integrating TIN surfaces with Field Maps will streamline earthwork data capture workflows. For transportation centerline and pipeline transmission assets, these capabilities, combine these steps with stationing and offset capture into a single form. By following the steps outlined above, you can leverage this powerful combination to improve project outcomes and work effectively in your construction projects.

Share this article

Subscribe
Notify of
0 Comments
Oldest
Newest
Inline Feedbacks
View all comments