What a CRS actually is
The earth is roughly an oblate spheroid: slightly squashed at the poles, slightly bulging at the equator. Maps are flat. Every flat representation of the earth lies in some specific way: distorting distance, area, angles, or shape. A coordinate reference system (CRS) is the agreement about which lie a particular file is telling.
A CRS has two parts:
- A datum — a 3D model of the earth (which ellipsoid, where its centre is).
- A projection — the math that flattens the ellipsoid onto a plane, or the agreement that you're keeping spherical / ellipsoidal coordinates.
EPSG codes — EPSG:4326, EPSG:3857, EPSG:25832 — are entries in a registry that pair a datum and a projection (and units) into a single number. The number is shorthand for "this exact CRS."
WGS 84 (EPSG:4326): the global reference
WGS 84 (World Geodetic System 1984) is the datum that GPS uses. EPSG:4326 is WGS 84 expressed as latitude and longitude in decimal degrees — no projection at all, just position on the ellipsoid.
When you see coordinates like (52.5163, 13.3777) for the Brandenburg Gate, that's WGS 84 lat/lon. Every smartphone GPS chip reports in WGS 84.
Strengths:
- Global. Works anywhere on earth.
- Default for GeoJSON (RFC 7946 mandates it).
- Universally readable.
Weaknesses:
- Degrees are not metres. Distance calculations need great-circle math, not Pythagoras.
- Useless for analysis that needs metric units — area, length, buffer distances.
Use it for: storage, exchange, web-map source data. Avoid for analysis.
UTM (EPSG:32xxx, 25xxx): the metric workhorse
The Universal Transverse Mercator system slices the globe into 60 longitudinal zones, each 6° wide, and projects each zone independently. Within a single zone the projection is nearly conformal (preserves shape) and distances are accurate to roughly 1 part in 2,500.
EPSG conventions:
EPSG:32601–32660— UTM zones 1–60 Northern Hemisphere on WGS 84.EPSG:32701–32760— same zones, Southern Hemisphere.EPSG:25828–25838— ETRS89 / UTM zones 28–38 (European reference frame).
Coordinates are metres, expressed as easting (x) and northing (y) within the zone.
Strengths:
- Metres are metres. Pythagoras works for short distances.
- Areas and lengths use ordinary geometry.
- Standard for survey, cadastral, engineering work.
Weaknesses:
- Zone-local. Data crossing zone boundaries gets ugly.
- Not suited to global datasets.
- Not what web maps render in.
Use it for: surveying, cadastral data, anything that needs accurate distance or area at regional scale.
Web Mercator (EPSG:3857): the tile grid
The Spherical Mercator projection, popularised by Google Maps in 2005 and codified as EPSG:3857, is what every slippy tile map renders in. It treats the earth as a sphere (not the WGS 84 ellipsoid), projects it as a cylinder, and uses metres as the unit.
The catch: it distorts area massively as you move from the equator to the poles. Greenland looks roughly the size of Africa on a Web Mercator map. Africa is actually about 14 times larger.
Strengths:
- It's what tile servers and browser map libraries speak natively. Z/X/Y tile addressing assumes Web Mercator.
- Square pixels at the tile level — clean rendering.
Weaknesses:
- Area is wildly wrong away from the equator. Choropleths shaded by Web Mercator-derived area are nonsense.
- Not defined above ~85° N/S latitude (projection diverges at the poles).
Use it for: rendering web maps. Never for area or analytical work.
Why webmaps render in 3857 but store data in 4326
A common source of confusion: every Leaflet / Mapbox / MapLibre map ultimately renders in Web Mercator, but the GeoJSON data you load into them is in WGS 84. Why the split?
Because the rendering library does the projection at draw time. Storing in EPSG:4326 keeps the data portable (universal interchange format), and the library converts to Web Mercator on the fly for pixel placement. If you pre-projected your storage to 3857, you'd have to re-project it back before sharing with anyone who isn't drawing a tile map.
So: store in 4326, render in 3857, compute in a local UTM. Three CRSs, three jobs.
The practical rule
- Store your data in WGS 84 (EPSG:4326). It travels well and every tool reads it.
- Compute area, length, buffers, and other metric operations in a local projected CRS — UTM if your data is regional, a national grid (ETRS89/LAEA Europe = EPSG:3035) for continental analysis.
- Render in Web Mercator (EPSG:3857) because that's what the tile servers speak.
Converting between them
# WGS 84 → Web Mercator (for tiling)
ogr2ogr -t_srs EPSG:3857 out.geojson in.geojson
# WGS 84 → UTM Zone 33N (for metric analysis in Germany)
ogr2ogr -t_srs EPSG:25833 out.geojson in.geojson
# Project back
ogr2ogr -t_srs EPSG:4326 out.geojson projected.geojsonQGIS does the same job through Layer → Save As → CRS dropdown.
A word on reprojection accuracy
Reprojection introduces small numerical errors. WGS 84 ↔ Web Mercator and back is essentially lossless because both use the same datum. WGS 84 → an older national grid (NAD27, OSGB36) needs a datum shift, which is centimetre-to-metre level depending on the grid file used.
For survey-grade work, note the source CRS and don't reproject more than once.