Working with Ancient Roman maps isn't as straightforward as you'd think
I spent three weeks last year trying to overlay modern GPS coordinates onto the Peutinger Table, a medieval copy of a Roman itinerarium. The basic idea seems simple enough - you take an ancient map, find matching landmarks, and project them onto a modern coordinate system. The reality is considerably messier. Roman roads didn't follow straight lines between cities the way we expect. They routed around terrain, followed watershed boundaries, and sometimes doubled back on themselves for tactical reasons that aren't recorded anywhere. Start with your base layer. I recommend downloading the Barrington Atlas of the Greek and Roman World - it's free through many university portals and gives you a solid reference framework. The map key alone will save you hours of cross-referencing. Once you have that, you need a modern baseline. OpenStreetMap works fine for European sections, but for provinces east of the Euphrates you're better off pulling USGS topographic sheets or the IranData satellite mosaic. The registration process itself is where most people blow their weekend. You pick control points - things that exist in both datasets. A hill fort, a river confluence, a mountain pass. But here's what nobody tells you: Roman maps treat distance abstractly. The Tabula Peutingeriana shows Rome to Brindisi as roughly proportional, but compresses the entire eastern half into a sliver. If you try to force linear projection, your controls will scatter like shrapnel.
I found that using a polynomial transformation of order 2, with 8 or more control points distributed across the map area, gave acceptable results for the Italian peninsula. East of the Adriatic, even order 3 started overfitting. The residual error jumped from about 2 kilometers in central Italy to 15 kilometers in Thrace. That's the tradeoff you make when working with maps that were never meant to be georeferenced in the first place. For the coordinate extraction, I use QGIS with the Global Mapper plugin. It handles the reprojection chain better than ArcGIS does when you're working with unknown datums. The Roman surveyors used the centuriation system in some provinces - regular grid patterns laid out every 710 meters. When you encounter those, they become your anchor points. The centuriamap.eu project already has thousands of these identified across the empire. Pull their shapefiles and you've got free ground truth data. The real problem comes with toponyms. Ancient place names shift over time. Aventus appears in Ptolemy, Avenches in medieval documents, and modern Avenches sits roughly where they put it, but the coordinate precision in Ptolemy's Geography is maybe 50 kilometers in western Europe and completely speculative for Germania. I learned this the hard way when I tried to plot a route through the Black Sea coast using Ptolemaic coordinates alone. The result looked plausible until I cross-referenced with Strabo, and every third location was off by two degrees of latitude.
If you're doing this for academic work, cite the Pleiades gazetteer. It's the standard reference for ancient places with modern coordinates and confidence intervals. Every entry has a provenance trail back to the primary source. Use their WMS service directly in QGIS and you can overlay their place data on top of your own registration without manual CSV imports. One edge case I hit recently involved the Roman road network in southern Britain. The Ordnance Survey has excellent historic mapping, but the Roman routes often follow pre-existing Iron Age trackways that the Romans upgraded rather than building fresh. If you're digitizing from the Antonine Itinerary, you'll get straight-line distances between stations. The actual road might wind 40 percent farther depending on terrain. I solved this by pulling the Historic England Route dataset and manually adjusting segments where the modern A-roads clearly diverged from the ancient alignment based on archaeological reports. The processing time varies. A clean section of Italy with good control points takes about 45 minutes from raw image to registered layer. Eastern provinces with sparse archaeological coverage can run several hours per map sheet, and the result is still approximate. I usually mark uncertain registrations with a color code and don't trust anything in red for navigation purposes.
Get the Full Details

There are tools that claim to automate this whole process. Romaelements.fr has a decent viewer, and the Digital Hadrian's Wall project does solid work for Britain. But they're constrained by whoever built them. When you're working with lesser-known provinces or non-standard sources, you need the manual workflow. It's slower, but you catch errors that automated pipelines smooth over. For a full Ancient Rome Mapping Activity, budget a week for a moderate-sized region if you want results you can stand behind. Two weeks if you're including multiple source maps and cross-referencing against archaeological literature. The payoff is having a spatial dataset you actually understand rather than one generated by black-box software.