Short answer
Choose contours when the map must carry measurable information — exact elevations, gradients, or relative relief a reader can quantify — and when the terrain is too gentle for shading to show anything. Choose hillshade when you want an immediate, intuitive sense of landform shape. The two are not interchangeable: contours are a measurement layer, hillshade is a visualisation. The frequent right answer is to combine them — shaded relief for shape, labelled contours for value.
What each representation actually is
A contour is an isoline connecting points of equal elevation, derived from a DEM at a fixed vertical interval (say every 10 m). Contours are quantitative: the reader can read a number off a labelled line, count lines to measure relief, and infer gradient from spacing — close lines mean steep ground, wide spacing means gentle. Contours are also geometry, so they overlay cleanly on any basemap and survive printing in black and white.
A hillshade is a grey raster computed by simulating illumination of the surface from a light source at a given azimuth (compass direction) and altitude (angle above horizon). Each cell's brightness is a function of its slope and aspect relative to that light. The default in most tools is azimuth 315° (northwest) and altitude 45°. Hillshade is purely a visual cue: its grey levels are not elevations and cannot be measured.
When contours win
You need measurable values
A hillshade tells you "this is a ridge." A contour map tells you "this ridge crests at 1,240 m and rises 80 m over 200 m of plan distance." For volume estimates, cut-and-fill, flood stage, or any number a client will act on, contours (or the DEM itself) are the only honest choice.
The relief is too subtle to shade
On low-gradient terrain — floodplains, plateaus, gentle coastal slopes — hillshade returns a near-uniform grey because slope is small everywhere. Contours with a fine interval (1 m or 0.5 m on LiDAR data) reveal channels, levees, and micro-topography that shading simply cannot express.
Direction-independent representation
Because contours are isolines, no feature is privileged by a lighting direction. A subtle scarp shows the same whether it runs north–south or east–west — which is exactly the failure mode of hillshade.
The azimuth-bias trap
The biggest reason to prefer contours for interpretation is hillshade's directional bias. With a single light at 315°, linear features roughly perpendicular to the light (here, NE–SW trending) are thrown into sharp relief, while features parallel to the light (NW–SE) can disappear entirely, and slopes facing the light wash out while opposite slopes drown in shadow. A geologist mapping faults from a single hillshade will systematically miss structures aligned with the illumination — a well-documented artefact.
Mitigations exist: run several hillshades at different azimuths and blend them (multidirectional hillshade, available as gdaldem hillshade -multidirectional and in QGIS), or use slope/aspect rasters instead. But if the deliverable must be reliably direction-neutral and measurable, contours sidestep the problem rather than patching it.
Worked example: generating both from a DEM
From a 1 m LiDAR DEM in EPSG:25831, produce a clean combined product.
Contours with GDAL (1 m interval, elevation written to an attribute):
gdal_contour -a elev -i 1.0 dem_1m.tif contours_1m.gpkg
Or in QGIS: Raster ▸ Extraction ▸ Contour, set the interval, optionally an attribute name. For cartographic output, generate index contours (e.g. bold every fifth line at 5 m) by filtering elev % 5 = 0.
Hillshade, multidirectional, to reduce azimuth bias:
gdaldem hillshade dem_1m.tif hillshade.tif -multidirectional -z 1.0
Then in the map: place the hillshade as a base, set a hypsometric (elevation) colour ramp above it at ~50% opacity for shape-plus-value, and overlay the contours with labels on index lines only. That layering is the standard high-readability terrain map.
A note on -z (vertical exaggeration): leave it at 1.0 for honest relief. Exaggeration makes a pretty image but misrepresents slope, and anyone measuring from it will be misled.
Common pitfalls and why they happen
- Reading elevation off grey tones. Because hillshade looks three-dimensional, people treat darkness as depth. It is not; it is aspect relative to one light.
- Single-azimuth structural mapping. Lineaments parallel to the default 315° light vanish, so the interpretation is biased toward NE–SW structures.
- Contour interval mismatched to scale and data. A 10 m interval on flat terrain shows nothing; a 0.5 m interval on a noisy 30 m DEM produces dense, wandering "string ball" lines that are interpolation noise, not landform.
- Contours from an unsmoothed noisy DEM. LiDAR speckle becomes jagged, unreadable lines. A light smoothing (e.g. a low-pass filter) before contouring, documented, gives cleaner geometry.
- Vertical exaggeration left on. A
-zabove 1 inflates apparent steepness and breaks any quantitative reading.
QA and validation
- Spot-check contour values against the DEM at a few points (
gdallocationinfo -valonly dem.tif <px> <py>) to confirm the labelled elevations are real. - Compare a multidirectional hillshade to a single-azimuth one over your area; if features appear or vanish, you have confirmed azimuth sensitivity and should not rely on one light for interpretation.
- Confirm the contour interval is legible at the intended print scale — lines closer than about 0.2 mm apart on paper merge into a smear.
- State the source DEM resolution and any smoothing on the map; contour fidelity is bounded by the DEM, not the interval you choose.
Bathyl perspective
We pick the representation from the question, not the aesthetic. If a decision-maker will measure something, contours (or the DEM) carry the numbers and we say so on the map; if they need to grasp shape, shaded relief does it, ideally multidirectional to avoid hiding structures behind the light. The most defensible terrain maps usually use both, with each doing only the job it is honest about.
Related reading
- When Hillshade Misleads Interpretation
- Hillshade Azimuth and Altitude Explained
- Terrain Analysis Checklist for Client Reports
- Terrain intelligence