Web Mercator Is for Display, Not Measurement: A Practical Field Guide
Why this exists
Teams keep shipping map bugs with the same root cause:
- “Distance looked fine on the map, but QA says it’s wrong.”
- “Area heatmap says Region A is bigger than B, but that’s impossible.”
- “Global dashboard looks great, analytics are quietly biased.”
The usual culprit is treating EPSG:3857 (Web Mercator) like a measurement CRS. It is excellent for tiled visualization. It is usually the wrong tool for distance/area analytics.
One-line mental model
Web Mercator is a rendering coordinate system, not a truth-preserving measurement system.
Use it for:
- slippy maps
- tile addressing
- smooth pan/zoom UX
Do not use it (directly) for:
- authoritative distances
- area comparison
- geodetic analytics
Why Web Mercator won anyway
It solves product problems very well:
- simple global tile pyramid (
/z/x/y) - fast client rendering
- one projection for most web basemaps
- stable ecosystem across map providers
So the dominance of 3857 is rational for visualization UX. The problem starts when teams assume “popular for display” means “correct for measurement.”
Distortion intuition you can use in 10 seconds
For spherical Mercator, local scale factor is approximately:
[ k(\phi) = \sec(\phi) = \frac{1}{\cos(\phi)} ]
So distortion grows with latitude:
- 0°: 1.00× (equator)
- 30°: 1.15×
- 45°: 1.41×
- 60°: 2.00×
- 75°: 3.86×
If you measured “planar meters” in 3857 at 60°N and treated them as true distance, you can be wildly off.
Also: slippy maps clip near ±85.0511° because of the Mercator transform behavior and tile-square convention.
The subtle part: “Pseudo” Mercator
EPSG:3857 is not classic ellipsoidal Mercator used for navigation charts. It is Popular Visualisation Pseudo-Mercator:
- geodetic coordinates are WGS84-based
- projection math uses the spherical-style Mercator formulation for web compatibility
This is exactly why EPSG scope language is effectively “web mapping and visualisation.” Treat that scope text as a product requirement, not trivia.
Projection selection by task (practical)
1) Interactive basemap UI
- Use: EPSG:3857
- Why: ecosystem compatibility, tiles, performance
2) Local/regional distances (routing, nearest, service radius)
- Use: local projected CRS (often UTM zone or national CRS)
- Better: compute geodesic distances on ellipsoid for critical paths
3) Area comparison (choropleths, resource density, coverage)
- Use: equal-area projection (Albers EA, Lambert Azimuthal EA, Equal Earth, etc.)
- Never rank region sizes from Web Mercator polygons directly
4) Bearing/rhumb-line navigation visuals
- Mercator can be useful for constant-bearing line display
- Still separate display projection from measurement pipeline
Safe architecture pattern (recommended)
Use a dual-CRS pipeline:
- Store geometry in authoritative CRS (often EPSG:4326 or local authoritative CRS)
- Run analysis in a task-appropriate CRS or geodesic engine
- Reproject to 3857 only for display/output tiles
This prevents “the map coordinate system became the analytics coordinate system” drift.
Common production mistakes
- Running area stats directly on 3857 geometries
- Buffering in 3857 meters at high latitude
- Mixing 4326 and 3857 without explicit transformation step logs
- Using one global projection for every KPI because dashboards share a map widget
- Assuming tile math == geodesy
Quick triage checklist for suspicious map numbers
When metrics look odd:
- What CRS are source geometries in?
- What CRS was used for analysis math?
- Was there an explicit reprojection step (with logs/versioned pipeline)?
- Are we comparing area in equal-area CRS?
- Are we computing long distances geodesically?
If any answer is “not sure,” trust the visualization less than the uncertainty.
Tiny operational guardrails that pay off
- Add
analysis_crsmetadata field to every spatial job artifact - Add CI lint: fail when area/distance jobs run in EPSG:3857
- For map widgets, label clearly: “Display projection: Web Mercator”
- Keep reusable utility functions:
to_display_3857(),to_analysis_crs(task, region)
Bottom line
Web Mercator is a brilliant UI projection and a risky analysis projection.
If your team separates:
- storage truth,
- analysis CRS,
- display CRS,
you eliminate a surprisingly large class of geospatial bugs before they turn into bad decisions.
References
- EPSG registry entry (WGS 84 / Pseudo-Mercator, EPSG:3857): https://epsg.io/3857
- PROJ documentation, Mercator projection: https://proj.org/en/stable/operations/projections/merc.html
- OpenStreetMap Wiki, Slippy map tilenames and Web Mercator tile math: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
- Snyder, J. P. Map Projections—A Working Manual (USGS Professional Paper 1395)