How it works
Draw equal small circles all over the globe, then project them. Each lands on the map as (very
nearly) an ellipse, and that ellipse is the projection's whole story at that point: its long and
short axes a and b are the largest and smallest scale there. If every ellipse is a
circle the map is conformal, and shapes are right in the small. If every ellipse has the same area
(ab = 1) the map is equal-area. No map can be both.
Nicolas Auguste Tissot worked this out in 1859. The ellipse is the image of a circle under the
projection's local linear map, its Jacobian. "Indicatrix" draws that ellipse; "Projected circles"
projects the actual circle point by point, and the two part company as the circles grow. The red
and blue lines are where the parallel and the meridian through the point go, with scales
k and h; they cross at right angles only where θ′ is 90°.
Every ellipse is drawn at the same ground radius, so its size on the map is the scale there. "Fit
the spacing" picks that radius so the ellipses fill a share of the gap to their neighbours, as
you might otherwise choose a scale by eye; "fixed radius" sets it
yourself, in degrees of arc. Centres can sit on the graticule or on a square grid laid over the
map, which suits a regional projection. "Shape only" redraws every ellipse with the same area, so
what is left is how much it is stretched and which way.
The indicatrix samples the distortion at a few points; the same factors can be worked out at
every pixel. "Distortion field" picks one (areal scale, angular distortion, either axis, the
scales along the meridian and parallel, the flattening a/b, how far the meridian
and parallel are from crossing square, or the convergence) and shows it as an image, as contours
at round values (the isolines of Snyder's Album of Map Projections), or as the colour of
each ellipse. "Factors GeoTIFF" saves every factor PROJ reports over the map in view as float
bands in the map's own CRS, named as proj_factors() names them.
The numbers are the ones PROJ reports from
proj_factors(),
worked out here from any forward projection by differencing it at the same four points around the
picked one, with the same formulas (Snyder 1987); they match PROJ to about 1e-8. The calculation
follows Bill Huber's answer on GIS Stack Exchange.
The map is drawn by proj4js.
| Symbol | Meaning |
| h, k | scale along the meridian, along the parallel |
| a, b | largest and smallest scale (the ellipse's semi-axes) |
| s | areal scale, ab |
| ω | largest error in an angle at the point |
| a/b | flattening of the ellipse (1 is a circle) |
| θ′ | angle the meridian and parallel cross at on the map |
| convergence | angle from map north to the meridian |