A contour line (isoline of elevation) joins points of equal height above a vertical datum. Together, a set of contours at a fixed vertical spacing — the contour interval — represents three-dimensional terrain on a flat map, encoding slope, relief, and landform shape in a precise, measurable way.

How to read them

Closely spaced contours indicate steep ground; widely spaced lines indicate gentle slopes. Closed loops mark hilltops or, with hachures or depression ticks, closed basins. V-shaped contours pointing upstream trace valleys and drainage; rounded contours pointing downhill mark ridges and spurs. Every nth line is usually drawn heavier as an "index contour" with a labeled elevation.

Why it matters

Contours give an exact, quantitative read of elevation that hillshade cannot: you can interpolate the height of any point and compute slope directly from line spacing. They remain the standard for engineering plans, geological field maps, and any product where a reader needs to extract numeric elevations rather than just visualize relief.

Concrete example

Generate contours from a DEM with GDAL: gdal_contour -a elev -i 10 dem.tif contours.gpkg Here -i 10 sets a 10 m interval and -a elev writes the elevation into an attribute field. In QGIS, the Contour tool wraps the same algorithm. Choose the interval to suit terrain: 5–10 m in rolling country, 20–50 m in mountains.

Common pitfall

Contours inherit the DEM's vertical datum and any noise in it. A noisy or pit-filled DEM produces jagged, tangled contours and spurious closed loops. Smooth or hydrologically condition the DEM first, and confirm the vertical datum (e.g., orthometric vs ellipsoidal heights) so labeled elevations are correct.

Related reading