Skip to content
GIS for History

A time-enabled map carries dates on its features so it can show only what existed at a chosen moment and animate change across a period — in QGIS this is the Temporal Controller, a time slider that filters your data by a date field. To build one you add date information to a layer, switch on the layer's Temporal tab, and press play. This guide explains the idea in plain language and walks one small worked example: the opening of railway stations in a county across the 1840s-1870s.

What does "time-enabled" actually mean?

A normal GIS layer shows every feature at once. A time-enabled layer knows when each feature was true, so the map becomes a function of time. Move the slider to 1851 and you see only what existed in 1851. Press play and you watch the railway network grow line by line.

Two ingredients make this work:

  1. Date data on every feature — a real date field, not free text.
  2. A temporal engine — the QGIS Temporal Controller reads those dates and filters the display as the clock advances.

That is the whole concept. Everything else is detail.

What date data do I need?

Pick one of two models per layer:

  • Single date — for instantaneous events: a death, a battle, a station opening. One column, e.g. event_date.
  • Start and end dates — for things with duration: a building, a boundary, a railway line. Two columns, e.g. valid_from and valid_to.

Dates must live in an actual date field in ISO format. A column of text like "circa 1850" will not filter. Convert it to 1850-01-01 with a recorded convention, and add a confidence note.

text
station_name   line          opened
Thirsk         York–Darl.    1841-03-31
Northallerton  York–Darl.    1841-03-31
Bedale         Leyburn br.   1855-02-06
Leyburn        Wensleydale   1856-02-19

How do I time-enable a layer in QGIS?

Three clicks once the dates are clean:

  1. Right-click the layer ▸ Properties ▸ Temporal.
  2. Tick Dynamic Temporal Control. Choose the configuration:
    • Single field with date/time ▸ point at opened (event mode), or
    • Separate fields for start and end ▸ point at valid_from / valid_to.
  3. Open the Temporal Controller panel (the clock icon on the toolbar).

Set the time range to cover your data, choose a step (1 year reads well for decades), and press play. Stations appear in the year they opened.

Single date or start and end — which fits my data?

The choice follows the phenomenon, not preference:

Your featureModelWhy
Station opening, death, battlesingle dateit happens at a moment
Building, parish, railway linestart + endit persists, then ends
A line still in use todaystart + open enduse a sentinel end date

For an open-ended period, set the end date to a far-future sentinel (e.g. 9999-12-31) so the feature stays visible to the end of the animation.

How do I turn it into a shareable animation?

The Temporal Controller exports frames directly: set the time range and step, click the export animation button, and it writes one image per step. Then stitch them:

bash
ffmpeg -framerate 4 -i frame_%04d.png \
       -c:v libx264 -pix_fmt yuv420p railways.mp4

Keep the frame rate modest (3-5 fps) so a reader can register each state. Add a clear date label — the Temporal Controller can stamp the current date onto each frame via an expression-based label.

What about uncertain dates?

Most historical dates are fuzzier than a date field implies. Do not fake precision. Adopt a convention and document it: widen valid_from/valid_to to the plausible range, carry a date_confidence attribute, and consider styling low-confidence features differently (dashed, faded). An honest animation shows uncertainty rather than hiding it behind a smooth slider.

Key Takeaways

  • A time-enabled map filters features by date so it shows any single moment and animates change.
  • Each feature needs real date data — single event date, or start/end for things with duration.
  • Use the QGIS Temporal tab plus the Temporal Controller; no plugins required.
  • Dates must be ISO-format date fields, not free text like "circa 1850".
  • Export frames from the controller and assemble a GIF or MP4 with ffmpeg at 3-5 fps.
  • Use a sentinel end date for periods still open today.
  • Represent uncertain dates with a documented convention and a confidence attribute; never fake precision.

Frequently Asked Questions

What is a time-enabled map?

A time-enabled map carries date information on its features so the map can show only what existed at a chosen moment, and animate change across a period. In QGIS this is the Temporal Controller, which filters features by a date field as a time slider moves.

What data do I need to make a map time-enabled?

Each feature needs at least a date — either a single event date, or a start and end date defining when it was valid. The dates must be in a real date field (ISO 8601 YYYY-MM-DD), not free text, for the controller to filter them.

How do I time-enable a layer in QGIS?

Open Layer Properties, go to the Temporal tab, enable it, and point it at your date field or your start/end fields. Then open the Temporal Controller panel and press play or drag the slider.

Single date or start/end dates — which should I use?

Use a single date for instantaneous events like a death or a battle. Use start and end dates for things with duration like a building, a parish boundary, or a railway line. QGIS supports both modes per layer.

Can I export a time-enabled map as an animation?

Yes. The Temporal Controller has an export-to-frames option that writes one image per time step; assemble them into a GIF or MP4 with ffmpeg. Keep the time step and frame rate modest so viewers can read each state.

How do I handle features with uncertain dates?

Decide a documented convention — for example widen the validity interval to the plausible range, and add a confidence attribute. Never invent a precise date just to make the animation play smoothly.