Distortions in Map Projections

Manipulate[
SeedRandom[123];
Show[{
WorldPlot`WorldPlot[{WorldPlot`World,WorldPlot`RandomGrays},WorldPlot`WorldRange->{{-87,87},{-180,180}},WorldPlot`WorldProjection->proj,WorldPlot`WorldGrid->15,WorldPlot`WorldGridStyle->Gray,WorldPlot`WorldBorders->Thin,WorldPlot`WorldRotation->{x,y,z},WorldPlot`WorldRotatedRange->True],
WorldPlot`WorldGraphics[{EdgeForm[{Red,Thick}],FaceForm[{Green,Opacity[.35]}],Polygon[tissotCircle[loc,α]],Red,PointSize[Medium],Point[60loc],
Thick,Line[{60loc,tissotPoint[loc,α,π]}],Line[{60loc,tissotPoint[loc,α,π/2]}]}]},PlotRange->If[proj===WorldPlot`Mercator,{Automatic,{-9000,9000}},Automatic],ImageSize->{500,300}],
Row[{Control[{{proj,WorldPlot`Equirectangular,"projection"},{WorldPlot`Albers[35,65]->"Albers",WorldPlot`Equirectangular->"Equirectangular",WorldPlot`LambertCylindrical->"LambertCylindrical",WorldPlot`Mercator->"Mercator",WorldPlot`Orthographic->"Orthographic",WorldPlot`Sinusoidal->"Sinusoidal",Stereographic->"Stereographic"},ImageSize->Small}],Control[{{loc,{0,0},"   location"},{{0,0}->"zero base",{90.,0.}->"North Pole",{-89.9,0.01}->"South Pole",{61.19`,-149.76`}->"Anchorage",{-36.85`,174.76`}->"Auckland",{13.73`,100.5`}->"Bangkok",{39.93`,116.4`}->"Beijing",{52.52`,13.38`}->"Berlin",{4.63`,-74.09`}->"Bogota",{18.96`,72.82`}->"Bombay",{50.83`,4.33`}->"Brussels",{-34.61`,-58.37`}->"BuenosAires",{30.06`,31.25`}->"Cairo",{-33.93`,18.46`}->"CapeTown",{33.6`,-7.62`}->"Casablanca",{22.284`,114.15`}->"HongKong",{41.1`,29.`}->"Istanbul",{-6.18`,106.83`}->"Jakarta",{-12.07`,-77.05`}->"Lima",{51.5`,-0.17`}->"London",{34.09`,-118.38`}->"LosAngeles",{40.42`,-3.71`}->"Madrid",{14.6`,120.98`}->"Manila",{25.79`,-80.22`}->"Miami",{55.75`,37.62`}->"Moscow",{-1.29`,36.82`}->"Nairobi",{40.7`,-73.92`}->"NewYork",{41.89`,12.5`}->"Rome",{59.93`,30.32`}->"SaintPetersburg",{37.76`,-122.44`}->"San Francisco",{-33.46`,-70.64`}->"Santiago",{-23.53`,-46.63`}->"SaoPaulo",{31.23`,121.47`}->"Shanghai",{1.3`,103.85`}->"Singapore",{-33.87`,151.21`}->"Sydney",{35.67`,139.77`}->"Tokyo",{49.28`,-123.13`}->"Vancouver"},ImageSize->Small}],Control[{{α,15.°, "   diameter"},{5.°->"5°",15.°->"15°"}}]}],
Style["degrees of rotation around:",Bold],
Row[{Control[{{x,0,"  horizontal axis"},Range[0,90,15],SetterBar}],
Control[{{y,0,"  vertical axis"},Range[0,180,30],SetterBar}]}],
{{z,0,"  current North Pole"},Range[-180,180,30],SetterBar},
SynchronousUpdating->False,TrackedSymbols:>{proj,loc,α,x,y,z},
SynchronousInitialization->False,
AutorunSequencing->{{1,10},{4,10}},
Initialization:>(
Get["WorldPlot`"];
cartToGeo[{x_,y_,z_}]:={π/2-ArcCos[z],ArcTan[x,y]};(* converts cartesian {x,y,z} to geographic {ϕ,λ} *)(* parametric equations for the geographic coordinates of a circle on the unit sphere centered at {ϕ0,λ0} and with angular diameter α *)
ϕcircle[{ϕ0_,λ0_},α_,γ_]:=-ArcSin[Cos[γ] Cos[ϕ0] Sin[α]-Cos[α] Sin[ϕ0]]180 60/π ;
λcircle[{ϕ0_,λ0_},α_,γ_]:=ArcTan[Cos[α] Cos[λ0] Cos[ϕ0]+Sin[α] (-Sin[γ] Sin[λ0]+Cos[γ] Cos[λ0] Sin[ϕ0]),Cos[λ0] Sin[α] Sin[γ]+Sin[λ0] (Cos[α] Cos[ϕ0]+Cos[γ] Sin[α] Sin[ϕ0])]180 60/π ;
tissotCircle[{ϕ0_,λ0_},α_]:= Table[{ϕcircle[{ϕ0 °,λ0 °},α,γ],λcircle[{ϕ0 °,λ0 °},α,γ]},{γ,0.,2 π,π/12}];
tissotPoint[{ϕ0_,λ0_},α_,γ_]:={ϕcircle[{ϕ0 °,λ0 °},α,γ],λcircle[{ϕ0 °,λ0 °},α,γ]};
Stereographic={2. Cos[π/180/60 #2] Cos[0.000291 #1],2 Sin[0.000291 #2] Cos[0.000291 #1]}/(1+Sin[0.000291 #1])&;)]

All map projections give rise to certain distortions. This Demonstration shows these distortions for different projections by applying three sequential rotations to the globe: the first is about the y axis, the second is about the z axis, and the third is about the North Pole after the first two rotations.

To better evaluate map distortion, N. A. Tissot imagined an (infinitesimally) small circle (indicatrix) centered on some point on the surface of the Earth and considered its shape after transformation by a given map projection. This Demonstration also shows Tissot's indicatrix for selected locations, for different projections and for different rotations of the globe.

The parametric equations for the geographic coordinates of a spherical circle were derived by applying the Mathematica function TransformationFunction: RotationTransform[{{0, 0, 1}, {Cos[λ] Cos[ϕ], Sin[λ] Cos[ϕ], Sin[ϕ]}}] to a circle parallel to the x-y plane: {sin α cos γ,sin α sin γ,cos α}.

For clarity, a circle corresponding to a solid angle of 2×5° or 2×15° is used for the Tissot indicatrix. The grid on the world map is spaced at 15° in both directions.

In conformal projections (Mercator, stereographic), where angles are preserved around every location, the Tissot indicatrix is always a circle, with varying size.

In equal-area projections (Albers, Lambert cylindrical, sinusoidal), where area proportions between objects are conserved, the Tissot indicatrix has the same area, although its shape and orientation vary with location.

The properties of the Tissot indicatrix are for an infinitesimally small circle and hence more apparent for a 5° diameter than for a 15° diameter.

To better demonstrate angular distortion, two radii, pointing east and north, are added to the indicatrix.

A pure function representing stereographic projection (from the North Pole to the plane z == -1) has been added to the standard WorldPlot Package projections.

See also:

Tissot's Indicatrix

Distortion patterns in map projections

Nicolas Auguste Tissot

Contributed by: Erik Mahieu

Parametric equations suggested by: Arnold Debosscher