Short answer

For terrain analysis in ArcGIS Pro the workhorse is the Spatial Analyst extension: it provides Slope, Aspect, Hillshade, Curvature, the full hydrology toolset (Flow Direction, Flow Accumulation, Watershed), and Viewshed/Visibility on raster DEMs. 3D Analyst is what you add when the surface is a TIN, terrain dataset, or LAS and you need true 3D operations — line of sight, surface volume, interactive 3D scenes. Image Analyst is for heavy LiDAR point-cloud classification and imagery-derived elevation. Most professional terrain work licenses Spatial Analyst plus 3D Analyst; Image Analyst is added when point clouds dominate.

The important point is that these are licensed extensions, not free toolboxes. The tools are visible in the Geoprocessing pane regardless, but if the extension is not checked out (Project > Licensing, or arcpy.CheckOutExtension), the tool fails at run time. Knowing which capability lives in which extension prevents both wasted licensing spend and surprise failures.

Spatial Analyst — the raster terrain core

Spatial Analyst is the extension you cannot do raster terrain analysis without. From a DEM raster it gives you:

  • Surface derivatives: Slope (degrees or percent rise), Aspect, Hillshade (with azimuth/altitude or multidirectional), and Curvature (profile and plan). These mirror, and are interoperable with, GDAL's gdaldem slope/aspect/hillshade — useful when you cross-check against open tools.
  • Hydrology: Fill (sink removal), Flow Direction (D8 by default, also D-Infinity and MFD), Flow Accumulation, Stream Order, Watershed, and Snap Pour Point. A standard catchment delineation is Fill → Flow Direction → Flow Accumulation → threshold to streams → Watershed.
  • Visibility: Viewshed, Viewshed 2, and Visibility, computing what is seen from observer points across the DEM.
  • Map Algebra / Raster Calculator: the expression engine and the Python arcpy.sa module (Slope("dem"), Raster("a") + Raster("b")) that let you script reproducible terrain pipelines.

If your terrain work is grid-based — slope maps, hillshades, watershed delineation, terrain ruggedness — Spatial Analyst alone covers it.

3D Analyst — surfaces, TINs and true 3D

3D Analyst earns its place when the data model is a surface object rather than a grid, or when the question is inherently three-dimensional.

  • TIN and terrain datasets: build a Triangulated Irregular Network from mass points and breaklines (Create TIN, Edit TIN), or a multi-resolution terrain dataset from a geodatabase feature dataset — the scalable structure ESRI uses for very large survey/LiDAR collections.
  • Surface tools: Surface Volume (cut/fill above or below a plane — essential for earthworks and pit volumes), Line of Sight, Construct Sight Lines, Interpolate Shape (drape features onto a surface), and Surface Difference.
  • Conversion bridges: LAS Dataset to Raster, TIN to Raster, Raster to TIN — how you move between the grid world of Spatial Analyst and the surface world of 3D Analyst.
  • 3D visualization in Local and Global Scenes, with vertical exaggeration and extrusion.

A common combined workflow: classify ground returns from LiDAR, build a terrain dataset (3D Analyst), rasterize to a bare-earth DEM (LAS Dataset to Raster), then run Slope/Hydrology on it (Spatial Analyst).

Image Analyst — LiDAR at scale and imagery elevation

Core ArcGIS Pro and 3D Analyst can display a LAS dataset and convert it to a DEM. Image Analyst is the upgrade when point clouds and imagery drive the pipeline:

  • Advanced point-cloud classification and Classify LAS / Classify Point Cloud Using Trained Model, including deep-learning-based ground/vegetation/building separation.
  • Raster functions (a lazy, on-the-fly processing chain that does not write intermediate rasters) for slope, hillshade, and elevation derivatives over large mosaics.
  • Tools for photogrammetric and stereo-derived elevation and change detection on imagery.

If you receive raw, unclassified LiDAR and must produce clean bare-earth DEMs at scale, Image Analyst pays for itself; for already-classified data you can often stay in 3D Analyst.

Worked example: catchment + earthwork volume

  1. Receive classified LiDAR (LAS). In ArcGIS Pro, create a LAS Dataset, filter to ground returns (class 2).
  2. 3D Analyst: LAS Dataset to Raster, cell size 1 m, binning average, to produce dem_1m.tif.
  3. Spatial Analyst: FillFlow Direction (D8) → Flow Accumulation. Threshold accumulation (e.g. > 1000 cells) with Raster Calculator to extract the stream network, snap pour points, Watershed to delineate the catchment.
  4. 3D Analyst: build a design surface (proposed grade) and run Surface Difference / Surface Volume between existing and design to get cut and fill volumes in m³.
  5. Script it with arcpy: arcpy.CheckOutExtension("Spatial") and arcpy.CheckOutExtension("3D") at the top so the run fails fast if a license is missing.

Common pitfalls and why they happen

  • "Tool failed to execute" with no obvious cause. The extension is not checked out. Enable it in Project > Licensing or call CheckOutExtension; the tool is visible without the license but cannot run.
  • Wrong slope units in reports. Slope defaults to degrees in some templates and percent in others — set the output_measurement explicitly and label it.
  • Hydrology that ignores real channels. Sinks were not filled, or the DEM is hydro-conditioned for the wrong drainage. Always Fill first, and consider enforcing known streams as breaklines.
  • Sluggish performance on huge LiDAR. Rasterizing the whole tile set at once instead of using a terrain dataset or Image Analyst raster functions (deferred processing) blows up memory.
  • Buying the wrong extension. Teams license 3D Analyst expecting hydrology (which is Spatial Analyst), or skip Spatial Analyst assuming Pro includes Slope. Map the capability to the extension before purchasing.

QA / validation

Cross-check derivatives against an independent tool: run gdaldem slope dem.tif slope_gdal.tif and difference it against the ArcGIS Slope output — they should agree to within edge and algorithm-choice differences. For hydrology, overlay the derived stream network on a known hydrography layer (e.g. national hydro data) and confirm the major channels coincide. For volumes, sanity-check Surface Volume against a hand calculation on a simple test surface. And confirm the DEM's NoData and CRS (a projected, metre-based CRS) before any of it, because slope and volume are meaningless in degrees of latitude/longitude.

Bathyl perspective

We pick ArcGIS extensions by the data model the project actually has — grid, TIN, or point cloud — not by brand momentum, and we license the minimum that covers the lifecycle from raw elevation to validated derivative. Where the same result can be cross-checked in GDAL or QGIS, we do it, so a slope class or a catchment boundary is defensible regardless of which toolbox produced it.

Related reading

Sources