Skip to content
GIS for History

To get started with QGIS for history, install the Long Term Release, set your project coordinate system, add a modern basemap with the QuickMapServices plugin, then bring in your own sources — a georeferenced map, a spreadsheet of places, or a boundary layer — and join, style and map them. QGIS is free, runs on Windows, macOS and Linux, and handles every core task a historian needs without a licence. This guide walks the end-to-end workflow with one concrete example: mapping nineteenth-century cholera deaths against a parish layer.

Installing and setting up QGIS

Download the LTR installer (the 3.34 line) from qgis.org rather than the newest "latest" build — LTR is patched for a year and is the safe choice for shared project files. On first launch, do two things immediately:

  1. Project ▸ Properties ▸ CRS — set EPSG:27700 for a British project so measurements are in metres.
  2. Plugins ▸ Manage and Install Plugins — install QuickMapServices, then add an OSM basemap via Web ▸ QuickMapServices ▸ OSM.

You now have a georeferenced canvas to build on.

How do I bring my own historical data in?

Three common entry points cover most historical sources:

  • A spreadsheet with coordinates or addressesLayer ▸ Add Layer ▸ Add Delimited Text Layer. Point it at the X/Y columns, or geocode addresses first.
  • A georeferenced historical map — drag the GeoTIFF straight into the layers panel.
  • An existing boundary or features layerAdd Vector Layer, ideally a GeoPackage.

Worked example: load cholera_deaths.csv with British National Grid easting/northing columns. QGIS plots each death as a point. Save it properly with Export ▸ Save Features As ▸ GeoPackage — do not leave research data as a fragile CSV-derived layer.

Why GeoPackage instead of Shapefile?

The Shapefile is the legacy default and it will quietly damage historical data. Compare:

IssueShapefile (.shp)GeoPackage (.gpkg)
Field name length10 characters maxunlimited
Date fieldsunreliablenative, clean
File size limit2 GBeffectively none
Text encodingoften mangledUTF-8
Files per layer4-6 sidecarsone file

A field called parish_population_1851 becomes parish_pop in a Shapefile and you lose meaning. Always save to GeoPackage.

Joining tabular history to spatial layers

This is the most common historical operation: attaching a table of statistics to a boundary layer. Use Layer Properties ▸ Joins, matching a shared key — typically a parish name or census code.

text
Join layer:        parish_census_1851 (CSV)
Join field:        PARISH_CODE
Target field:      PARISH_CODE
Joined fields:     population, households, paupers
Custom field name prefix: (leave blank)

Pitfall: name-based joins fail silently on spelling variants ("St. Mary" vs "Saint Mary"). Clean keys in a spreadsheet or OpenRefine first, then join on a stable code, never on raw place names.

Styling so the map says something

Right-click the layer ▸ Properties ▸ Symbology. For the cholera points, a simple graduated symbol by death count works. For the parish layer, a Graduated renderer with population using the Natural Breaks (Jenks) classification and a single-hue ColorBrewer ramp reads honestly. Avoid rainbow ramps — they imply categories where you have a continuum.

What should I do next?

Once the basics click, the highest-value skills to learn in order are: georeferencing a historical map onto your canvas; digitising features by tracing that map; and spatial joins to ask "how many of X fall inside Y". Each is a separate short workflow, and together they cover the bulk of historical mapping.

Key Takeaways

  • QGIS is free, cross-platform and fully capable for historical research; install the LTR build.
  • Set your project CRS first — EPSG:27700 for the UK — so measurements mean something.
  • Save research data as GeoPackage, never Shapefile, to protect field names, dates and encoding.
  • Add modern basemaps via the QuickMapServices plugin.
  • Joins attach tabular history to boundaries; join on stable codes, not raw place names.
  • Use Jenks classification and single-hue ramps for honest thematic maps.
  • Progress to georeferencing, digitising and spatial joins as your next skills.

Frequently Asked Questions

Is QGIS free and good enough for serious historical research?

Yes. QGIS is free and open-source under the GPL, and it is used in funded HGIS projects and university courses. It does everything ArcGIS Pro does for typical historical work — georeferencing, digitising, joins, mapping — without a licence fee.

Which version of QGIS should I install?

Install the latest Long Term Release (LTR), currently the 3.34 line. LTR builds receive bug fixes for a year and avoid the churn of point releases, which matters when you are sharing a project file with collaborators.

What file format should I save my historical data in?

Use GeoPackage (.gpkg) rather than Shapefile. GeoPackage is a single SQLite file, has no 10-character field-name limit, no 2 GB cap, stores dates and UTF-8 text cleanly, and holds multiple layers in one file.

Do I need to learn coding to use QGIS?

No. The graphical interface covers loading data, joins, georeferencing and styling. Python (PyQGIS) and the Processing toolbox become useful only when you want to automate repetitive tasks across many files.

How do I get a modern basemap behind my historical data?

Install the QuickMapServices plugin from the Plugins manager, then add OpenStreetMap or an aerial layer. Confirm your project CRS first so the basemap and your data align.

What CRS should a UK history project use?

Set the project to EPSG:27700, the British National Grid, so distances and areas are measured in metres. Use EPSG:4326 (lat/long) only when exporting for a web map.