02truesize — Map Truth Lab
Every flat map lies. Interactive map-comparison and geodetic education tools • v0.3.3
1. Overview
02truesize brings the true-size map comparison concept into QGIS and extends it with geodetic education tools. The core premise: Web Mercator (EPSG:3857), used by virtually all online maps, grossly inflates areas away from the equator. Greenland appears continent-sized but Africa is roughly 14 times larger. The plugin lets users experientially see this by dragging country outlines that are re-projected through an equal-area projection in real time.
The plugin is organised as a four-tab dock: True Size (drag-and-drop country comparison), Duel (size-comparison quiz game), Truth (antipode, great circle, and fun-unit measurement tools), and Distort (projection report cards, Tissot indicatrices, and live distortion HUD).
2. True Size Comparison Tool
Lambert Azimuthal Equal-Area Double Transform
The core re-projection trick preserves true area during dragging:
- Pick-up: The tool records the click point as a "source anchor" in WGS84.
- Project to LAEA plane: The country's WGS84 geometry is transformed into a Lambert azimuthal equal-area (LAEA) CRS centred on the source anchor.
- Apply rotation: Optional rotation (R/E keys for ±10°) is applied in the LAEA plane.
- Re-centre: A new LAEA CRS centred on the cursor position (destination anchor) is created, and the geometry is inverse-projected back to WGS84 from this destination-centred plane.
- Render: The resulting WGS84 polygon is drawn on the canvas. Since LAEA preserves area, the true area of the country is maintained—the only distortion comes from how the current project CRS renders it, which is exactly what the user needs to see.
Drag updates are throttled to ~60 Hz. A live floating info label follows the cursor showing the country name, true area in km2, the area in Belgiums, and how many times larger or smaller the current map draws it. Three source modes: Built-in world countries (238 countries from Natural Earth), Active polygon layer, or Downloaded administrative boundaries (ADM0 from bundled data or ADM1 from Natural Earth 10m states/provinces).
3. Size Duel Quiz
Mercator-Deception Quiz Game
Two countries are shown as Mercator-projected silhouette cards drawn at the same true scale (computed via mercator_xy(), then centred and scaled to a common metres-per-pixel factor). The player guesses which country is truly larger. The question engine has a strong taste for deceptive pairs where Mercator draws the actually-smaller country as visually larger. Falls back to close-call pairs, then to any valid pair. Max true ratio between pair countries: 8.0×. Tracks current round, score, streak, and best streak (persisted across sessions).
4. Truth Tools
Geodetic Exploration on the Canvas
Antipode Tunnel: Click anywhere; the plugin computes the antipode (the point reached by digging straight through Earth), places a blue circle at the click and a red X at the antipode, reports the origin country and target country/ocean, and provides a "Fly to the antipode" button to re-centre the canvas.
Great Circle vs Straight Line: Click-start, click-end. Draws the geodesic line in blue (computed via QgsDistanceArea.geodesicLine() with 25 km segments, antimeridian-safe via multi-polyline) and the straight map segment in red dashed. Reports both ground lengths in km and the wasted distance and percentage difference.
Fun Units: Distance measurer (click-path) and area measurer (click a visible polygon). Reports in both standard units (km / km2) and playful-but-accurate equivalences: Olympic swimming pools, football pitches, Vaticans, Belgiums (the official unit of area), Eiffel Towers, marathons, Great Walls of China, and more. Exact matches (within ±7%) trigger spot-on celebration text. Antipode results include witty one-liners for land and ocean destinations.
5. Distortion Diagnostics
Projection Report Cards and Tissot Indicatrices
Report Card: Numerically analyses the current project CRS by sampling Tissot indicatrix parameters at latitudes 0°, 20°, 40°, 60°, and 75° along a meridian (default = 15°E). Reports per-latitude areal inflation factor relative to the equator and maximum angular deformation in degrees. Assigns letter grades (A+ through F) for area fidelity and shape fidelity, and generates a plain-language verdict (distinguishing conformal, equal-area, both, or compromise projections). Grading bands: Area [(1.02, A+), (1.10, A), (1.5, B), (2.5, C), (5.0, D), (12.0, E)]; Shape [(0.5, A+), (2.0, A), (10.0, B), (25.0, C), (45.0, D), (60.0, E)].
Tissot Circles: Generates a memory layer of constant ground-radius circles (configurable radius and grid spacing) on a lon/lat grid. When rendered in the project CRS, they deform into the classic Tissot indicatrices—ellipses that reveal local area and shape distortion.
Live HUD: A semi-transparent overlay pinned to the top-right of the QGIS canvas showing: "Map truth @ lat X°: areas xY the equator . shapes bent Z°". Updates on pan/zoom/CRS change (debounced at 180 ms).
6. Mathematical Background
Mercator Distortion
In the spherical Web Mercator projection, a point at latitude \(\phi\) maps to coordinates:
where \(R = 6\,371\,008.8\) m (authalic mean Earth radius). The linear inflation factor—how many times longer a metre is drawn at latitude \(\phi\) compared to the equator—is:
The areal inflation factor—how many times larger an area is drawn—is the square of the linear factor:
At latitude 60°, \(k = 2.00\) and \(a = 4.00\)—Greenland appears four times larger than its true size relative to equatorial regions. At 75°, \(a \approx 14.93\), meaning Antarctica and Greenland are grossly exaggerated.
Tissot Indicatrix
For any map projection with forward transform \((x, y) = f(\lambda, \phi)\), the local distortion is characterised by the 2×2 Jacobian matrix:
The singular values \(a \ge b\) of \(\mathbf{J}\) are the Tissot semi-axes: they describe how a unit circle on the globe deforms into an ellipse on the map. The areal factor is \(ab\) and the maximum angular deformation is \(\omega = 2\arcsin((a-b)/(a+b))\) in degrees.
Relative Areal Distortion
To compare how a location is drawn relative to a reference point, the plugin computes:
This tells the user, for the current project CRS (not just Mercator), how many times larger or smaller a country appears at its dragged-to location compared to its home latitude.
7. Controls Summary
True Size Tab
| Control | Description |
|---|---|
| Show built-in world layer | Toggles the 238-country Natural Earth layer |
| Grab from | Built-in world / Active polygon layer / Admin boundaries |
| Country / Boundary set | Country selector + ADM0/ADM1 level for downloads |
| Pick up & drag | Primary action button (checkable); activates drag tool |
| Ghost list | Dropped countries with coloured icons, area, and map-look factor |
| Remove / Clear all / Save as layer | Ghost management buttons |
Duel Tab
| Control | Description |
|---|---|
| ShapePanel cards | Two clickable Mercator silhouette cards at same true scale |
| Result / Stats / Next round | Feedback text, score/streak/round, and action button |
Truth Tab
| Control | Description |
|---|---|
| Antipode tunnel | Checkable tool button, result card, "Fly to the antipode" button |
| Great circle | Checkable tool button, result card with both lengths + wasted km/% |
| Fun distance / area | Two tool buttons, result card with fun-unit breakdown, copy button |
Distort Tab
| Control | Description |
|---|---|
| Grade my CRS | Button generating area/shape grades + verdict for current project CRS |
| Tissot radius / spacing / Add | Circle size (250/500/1000 km), grid spacing (15/30/45°), add button |
| Live HUD checkbox | Toggles the semi-transparent canvas overlay |
8. Workflow Guide
- Click the 02truesize toolbar icon. The dock opens on the right.
- True Size: Check "Show built-in world layer" to see the world. Press "Pick up & drag", click a country (e.g., Greenland), drag towards the equator, watch it shrink. Drop with left-click. Drag multiple countries to compare. Use R / E to rotate. Export all ghosts as a new layer.
- Size Duel: Switch to the Duel tab. Click the country card you think is truly larger. See the result and Mercator's deception exposed.
- Truth Tools: Use antipode, great circle, or fun-unit tools interactively on the canvas.
- Distortion: Grade your CRS, add Tissot circles, enable the live HUD, switch project CRS, and re-grade to compare projections.
9. Technical Notes
- Architecture: Clean three-layer split: pure-Python core (zero QGIS, independently testable), QGIS-dependent tools, and dialogs.
- LCG-based PRNG: Deterministic 32-bit state, avoids stdlib
randomfor QGIS Hub security scan compliance (Bandit B311). - Spherical geodesy: All math uses authalic mean Earth radius (6,371.0088 km). Haversine formula for distances, spherical forward geodesy for destinations.
- Adaptive theme: All UI colours derived from the active
QPalette; WCAG contrast compliance; per-tool accent colours (teal for True Size, indigo for Antipode, blue for Great Circle, green for Fun Units). - Project state persistence: Settings (image path, frame coords, preset, gamma, etc.) serialised as JSON and stored in the QGIS project under key
zero2truesize/state. - Bundled data:
countries.geojson(1.08 MB, 238 countries) with precomputed geodesic area, representative point, and decimated rings. - QGIS compatibility: 3.28 through 4.x. Zero external Python dependencies.
10. Literature
- Snyder, J. P. (1987). Map Projections—A Working Manual. USGS Professional Paper 1395. DOI: 10.3133/pp1395
- Monmonier, M. (1996). How to Lie with Maps (2nd ed.). University of Chicago Press.
- Tissot, A. (1881). Mémoire sur la représentation des surfaces et les projections des cartes géographiques. Gauthier-Villars.
- Canters, F. & Decleir, H. (1989). The World in Perspective: A Directory of World Map Projections. John Wiley & Sons.
- Battersby, S. E., Finn, M. P., Usery, E. L., & Yamamoto, K. H. (2014). Implications of Web Mercator and its use in online mapping. Cartographica, 49(2), 85–101. DOI: 10.3138/carto.49.2.2313