Appearance
To map changing historical boundaries, store each distinct configuration of an administrative unit as its own polygon carrying a validity interval — a valid_from and valid_to date — so one layer holds the full sequence of changes and you filter by year to see any moment. The hard part is not drawing the shapes; it is keeping dates, sources and topology consistent across hundreds of polygons so the result is defensible. This guide gives the data model and a project checklist.
What is the right data model?
Administrative geography is messy: parishes split, merge, transfer detached parts, and get renamed. Two modelling approaches exist:
- Time-slice polygons — each unit is fully redrawn for each period it differs. Simple to render, query and dissolve. The standard for historical GIS.
- Change-event / topology models — store only the edits and reconstruct any date on the fly. Compact but complex, and overkill for most projects.
Choose time-slices. Give every polygon these core attributes:
text
unit_name TEXT -- e.g. "Whitby"
unit_type TEXT -- parish, township, district
valid_from DATE -- ISO 8601, 1851-03-31
valid_to DATE -- 1894-12-31 (open period -> a sentinel like 9999-12-31)
predecessor_id TEXT -- links to the polygon it derived from
source TEXT -- citation
date_confidence TEXT -- exact / circa / inferred
geom_confidence TEXT -- surveyed / sketched / approximateHow do I query a single year from this layer?
Once every polygon is dated, a single expression returns the geography as it stood on any date. In the QGIS layer filter or a SQL view:
sql
SELECT * FROM parishes
WHERE valid_from <= '1881-04-03'
AND valid_to > '1881-04-03';That is the payoff of the model: one query, any census year, no separate files to keep in sync.
Which sources should I reuse before drawing?
Drawing boundaries from scratch is slow and error-prone. Reuse authoritative datasets:
| Region | Source | Coverage |
|---|---|---|
| Britain | GB Historical GIS / A Vision of Britain | parishes, registration districts |
| England | Historical Counties datasets | ancient/administrative counties |
| United States | Atlas of Historical County Boundaries (NHGIS) | counties with dated changes |
Cite the source per polygon. Where you must digitise from a georeferenced map, trace, then record geom_confidence honestly.
How do I keep the topology clean?
Changing boundaries multiply the chances of slivers and gaps. Within each time-slice, shared edges between neighbours must be coincident.
- Enable snapping to the layer's own vertices and segments (tolerance ~5 map units).
- Trace shared borders once and reuse the geometry for both neighbours.
- Run
Vector ▸ Topology Checkerwith rules: must not overlap, must not have gaps. - Fix every flagged sliver before moving on.
A 2-metre overlap looks invisible but corrupts area statistics and dissolves.
The project checklist
Apply this to every boundary layer before you trust it:
- [ ] Every polygon has
valid_fromandvalid_toin ISO 8601. - [ ] Open-ended periods use a documented sentinel date, not NULL.
- [ ] Each polygon cites a source.
- [ ]
date_confidenceandgeom_confidenceare filled, never left blank. - [ ] Topology Checker passes with zero overlaps and gaps per time-slice.
- [ ] A spot-check year query returns a complete, non-overlapping coverage.
- [ ] Renames and transfers link via
predecessor_id. - [ ] CRS is projected (EPSG:27700 for the UK) so areas compute in real units.
What goes wrong, and why
The recurring failures are predictable: leaving end-dates blank so date-filters drop polygons; joining census data on place names that spelling-vary; and drawing crisp lines for boundaries the sources only describe vaguely. The fix for all three is the same discipline — explicit dates, stable join keys, and recorded confidence.
Key Takeaways
- Model changing boundaries as dated time-slice polygons with
valid_from/valid_to, not separate files per year. - Query any historical year with a single date-range filter.
- Reuse authoritative datasets (GB Historical GIS, NHGIS) and cite sources per polygon.
- Keep topology coincident — run the Topology Checker and fix every sliver.
- Record date and geometric confidence explicitly; never leave them blank.
- Use a projected CRS so area calculations are valid.
- Run the checklist before trusting any boundary layer.
Frequently Asked Questions
How do I represent a boundary that changes over time in GIS?
Give every polygon a validity interval — a start date and end date column — so a single layer holds many time-slices. Each distinct configuration of a unit becomes its own dated polygon, and you query by date rather than maintaining separate files per year.
Should I store boundaries as time-slices or as change events?
Time-slices (fully drawn polygons per period) are simpler to map and query and are the usual choice for historical work. Change-event models record only the edits and are more compact but harder to render, so most projects use dated time-slice polygons.
What date fields should historical boundary polygons have?
At minimum a valid-from and valid-to date, plus a source citation and a confidence note. ISO 8601 (YYYY-MM-DD) is preferred; use a documented convention for uncertain dates rather than leaving them blank.
How do I keep boundaries topologically clean as they change?
Snap shared edges and run the QGIS Topology Checker for gaps and overlaps within each time-slice. Shared borders between adjacent units must be coincident, or area calculations and dissolves will be wrong.
What are good existing sources for changing boundaries?
For Britain, the GB Historical GIS / A Vision of Britain provides parish and registration-district boundaries; the Historical Counties of England datasets and the Atlas of Historical County Boundaries (US) are comparable. Reuse authoritative layers before drawing your own.
How do I record uncertainty in a historical boundary?
Add explicit fields for date confidence and geometric confidence, and never imply a hard line you do not have evidence for. Document the source and reasoning per polygon so others can judge reliability.