What it is
ATS Antiquity Atlas puts the Roman world on one dark, antique-tinted map: 14,601 road segments (5,611 major and 8,990 minor) from Itiner-e, the digital atlas of ancient Roman roads, 1,186 named places from the Pleiades gazetteer, 19 legionary fortresses and 92 frontier fortification walls from the Ancient World Mapping Center — all under an era toggle that crossfades the empire's boundary between 60 BC (the late Republic) and AD 117 (Trajan's territorial peak). Both boundary surfaces are AWMC political shading used as published; no era is derived or interpolated. Licenses: Itiner-e CC BY 4.0, Pleiades CC BY 3.0, AWMC ODbL 1.0.
Everything is bundled. The GeoJSON ships with the app, rebuilt from open sources by a reproducible script, so the Atlas makes no live data requests; the basemap is Esri's dark-gray vector style. Type-ahead search works across Latin and modern names ("Londinium / London"), place cards give the place type and its attested period, and a Grand Tour pod visits Roma → Alexandria → Carthago → Londinium → Byzantium → Athenae.
The audience is educators, museums and digital-humanities teams, and anyone who needs to see time-aware mapping and data provenance applied to a scholarly dataset.
The experience
The app boots over the Mediterranean at Trajan's peak: the AD 117 imperial-purple extent wash under a bronze road network, marble-white city dots waiting at higher zooms. Two era pods carry the story:
Like every app in the ATS branded line, the interface follows the house standard: React 19 and Tailwind 4 drive a dark glass shell, every control is a Lucide-iconed glass pod designed for this app, and there is no Esri widget chrome anywhere on screen. The map engine is Esri.
- The era toggle. Switching between 60 BC and AD 117 crossfades the empire boundary over 0.7 seconds — no flicker, no layer reloads, and interrupting mid-fade is safe. The road network does not thin with the era: Itiner-e dates only 3.2 % of its segments, so all 14,601 are drawn in both eras rather than inventing construction years.
- Type-ahead search. Latin or modern names, top 8 matches, fully keyboard-driven; Enter flies to the place and opens its card.
- Glass place cards. Latin name in display type, Greek attestation where recorded, the modern name, the decoded type (city or legionary fortress), and the attested period from the gazetteer's period bounds — "attested from 30 BC · to AD 640" for Londinium.
- The Grand Tour. One pod cycles six great cities of the empire, five seconds per stop, with the detail card in tow.
- The military layer. A Castle pod reveals dark-red fortress squares (19 legionary fortresses — Vindonissa, Deva, Isca Silurum) and dashed frontier-wall lines: Hadrian's Wall, the limes.
- Zoom rewards. Past zoom 5, Latin labels in italic Noto Serif appear over the city dots and the 8,990 minor roads fade in.
The data — where it comes from
Every source is bundled with the app — the Atlas makes no live data requests at all. The basemap tiles are the only runtime dependency.
Share-alike notice. Walls and empire extents: Ancient World Mapping Center (AWMC) geodata, ODbL 1.0 — derived data served at /react/antiquity-atlas/data/. License: https://opendatacommons.org/licenses/odbl/1-0/ · Source: https://github.com/AWMC/geodata. The wall and extent GeoJSON files in that directory are a derived database under the ODbL: AWMC's polylines and polygons were reprojected, coordinate-rounded and Douglas–Peucker simplified by scripts/build-open-data.mjs, and they are offered on the same ODbL 1.0 terms as the originals.
| Source | What it provides | Refresh | Cost | Attribution |
|---|---|---|---|---|
| Itiner-e — digital atlas of ancient Roman roads (Zenodo 10.5281/zenodo.17122148, v1.3, 2025-09-15) | 5,611 major + 8,990 minor road segments, every one named; no construction dates | Bundled snapshot; rebuilt by scripts/build-open-data.mjs | CC BY 4.0 — commercial use permitted | Brughmans, T., de Soto, P., Pažout, A. & Bjerregaard Vahlstrup, P. (2024) Itiner-e: the digital atlas of ancient roads; CC BY 4.0 |
| Pleiades gazetteer (Zenodo 10.5281/zenodo.15540082, Pleiades Datasets 4.1, 2025-05-28) | 1,186 places: Latin/Greek/modern names, city vs legionary-fortress codes, attestation windows | Bundled snapshot; rebuilt by scripts/build-open-data.mjs | CC BY 3.0 — commercial use permitted | Copyright © Ancient World Mapping Center and Institute for the Study of the Ancient World; CC BY 3.0 |
| AWMC geodata — frontier walls and political shading (github.com/AWMC/geodata) | 92 frontier-wall and limes features; empire-extent polygons for 60 BC and AD 117, both used as published | Bundled snapshot; rebuilt by scripts/build-open-data.mjs | ODbL 1.0 — share-alike | Ancient World Mapping Center, University of North Carolina; ODC Open Database License 1.0 |
| Esri dark-gray vector basemap | Anonymous legacy vector basemap (dark ground for the antique palette) | Esri-hosted | Anonymous basemap (no key) | Esri |
How it was assembled
The application is a fully static single-page app — no backend, no database, no server-side rendering. The stack is the shared ATS Labs branded-app baseline:
Module map — the codebase is small and deliberate; each file owns one concern:
Key engineering decisions
- Switched off NonCommercial data. The original bundle used DARMC roads and walls and DARE places, both CC BY-NC-SA, which barred commercial use. The atlas was rebuilt from three open sources whose licenses were verified at the source — Itiner-e (CC BY 4.0) for roads, Pleiades (CC BY 3.0) for places, and AWMC geodata (ODbL 1.0) for frontier walls and empire extents. A single script, scripts/build-open-data.mjs, downloads each source, checksums it, reprojects Itiner-e from EPSG:3395, simplifies, and writes public/data — so the bundle can be rebuilt from scratch and audited.
- Era crossfade: per-layer opacity under one rAF loop. Both extent layers are mounted at boot; switching eras runs a single requestAnimationFrame loop easing every layer's opacity to its target over 700 ms (ease-in-out) — a true crossfade with no layer add/remove. What the toggle no longer does is time-travel the roads: Itiner-e dates only 3.2 % of its 14,769 segments (22.4 % counting free-text construction periods), so filtering would hide three quarters of the network in every era. Rather than invent dates, the atlas shows the whole surveyed network in both eras and lets the crossfade carry the story.
- Two eras, not three, because AWMC publishes no Augustan surface. A third era at the death of Augustus was prototyped by clipping the AD 117 polygons to hand-drawn windows that excluded the post-Augustan annexations — Britannia, Mauretania, Thracia, Dacia, Cappadocia, Arabia Petraea. It worked, but it left visible straight cut edges in Morocco, Tunisia and the Levant, and it was the one artefact in the bundle that was invented rather than sourced. It was dropped: both shipped eras are AWMC political shading used 1:1.
- Selecting 1,186 places from a 41,000-place gazetteer. Pleiades has no significance rank, so the DARE rank-1 set was reproduced by a documented two-gate rule: the place must be typed as a settlement, polis or urban area AND carry an attested ancient name (Latin, Greek, or an untagged historic form), and it must have three or more recorded name forms — Roma has seven, Athenae five, a roadside vicus one or none. Type 11 = city (1,167), type 17 = legionary fortress (19, matched on a legion named in the description). Attestation years are clamped to the −4500…AD 640 window the card was written for.
- The "forts" file is not forts. roman-forts.geojson is 92 MultiLineString fortification walls from the Ancient World Mapping Center (ODbL) — Hadrian's Wall, the Upper German and Raetian limes, Trajan's Walls in Dacia. They render as dashed dark-red lines; the fortress squares the design called for come from the type-17 places instead, and one Castle pod toggles both together.
- Basemap locked to dark-gray-vector. The antique palette needs a dark ground: marble-white dots and bronze roads glow on dark gray but vanish on light parchment, and the imperial-purple wash reads as a regal tint rather than a bruise.