Georeferencing a historical map means answering: where on Earth does this pixel sit? For a single map, you place control points by hand — match corners and landmarks to known coordinates — and a polynomial transform handles the rest. For 500 maps in a uniform series, doing this by hand would take months. We don't do it by hand.

The key insight

The US Army's L7014 Vietnam topographic series (1:50,000 scale, produced 1950s–1970s) is a regular grid. Each sheet covers exactly the same number of degrees of latitude and longitude. If you georeference one sheet precisely, you can compute the coordinates of every adjacent sheet purely from arithmetic — no image matching required.

We call this GCP propagation. The process: manually georeference ~10% of sheets (seeds) distributed evenly across the grid. For each seed, fit an affine transform to four corner ground control points. Then compute the expected lat/lon corners of every adjacent sheet by adding the known Δlon/Δlat. Build an Allmaps annotation from those computed corners. The result: one manual georeference propagates to cover roughly 10 neighboring sheets, and those propagate further.

The datum problem

These maps use the Indian 1960 datum (EPSG:3148), based on the Everest 1830 spheroid. Modern GPS and web maps use WGS84. The difference is not negligible — up to 200m in parts of Vietnam. We apply a Helmert 3-parameter geocentric shift (towgs84=+198,+881,+317 for mainland South Vietnam) before computing any coordinates. This is the correction specified in EPSG transform 1052 for the EPSG:3148 → WGS84 conversion.

One practical note: PROJ and QGIS don't always apply this shift automatically when reading EPSG:3148. We have to pass the explicit proj4 string with the towgs84 parameters. Skipping this produces maps that are systematically off by roughly 170 meters — which looks fine until you overlay it on satellite imagery and notice the roads don't match.

The output

Every georeferenced sheet is stored as a W3C Web Annotation (Georeference Annotation) JSON file in Supabase Storage, compatible with the Allmaps viewer. 500+ sheets processed. Error rate under 1% on propagated annotations validated against manually-georeferenced seeds. The series is complete.

The method generalizes: any uniform map series with known sheet dimensions can be processed the same way. Hanoi. Phnom Penh. Manila. Whoever runs this first for their city's archive owns the result permanently.