Area-preserving swirling of the disk

20 Jul 2022

Tags: cartography

A consequence of the Riemann mapping theorem is that the conformal map from a given region of the sphere to a given region of the plane is essentially unique. Area-preserving maps, however, are not. For example, the The Lambert azimuthal equal-area projection (left) is an azimuthal equal-area map projection, which takes the sphere to a disk. The Wiechel projection (right) is also an equal-area map projection, which resembles a swirled version of the Lambert projection. As demonstrated on Daan Strebe’s forums, the Wiechel projection has uniformly worse angular distortion than the Lambert projection, so its only real use is to demonstrate that equal-area map projectons aren’t unique.

The Wiechel projection isn’t unusual. There is an infinite family of such equal-area map projectons to the disk. Those may be easier to understand as a transformation of the disk applied after the Lambert projection. Here we’ll look at some such transformations that are easy to describe.

Transformation of the disk

Consider a transformation of the disk in polar coordinates given by

\[\begin{split} r_o &= r_i \\ \theta_o &= \theta_i + f\left(r_i\right) \end{split}\]

where \(f\) is an arbitrary differentiable function. If \(f(0) = 0\) this transformation preserves the orientation of the origin: if \(f(1) = 0\) it preserves the orientation of the boundary.

All such transformations are area-preserving. This can be proven using Jacobians. This transformation is given polar coordinates, so we need to include the Jacobians of the transformation into and from polar coordinates. This is given as an example on the linked Wikipedia page: the Jacobian determinant of the transformation from polar coordinates to Cartesian coordinates is \(r\). The Jacobian determinant of the inverse transformation is just \(\frac{1}{r}\). Since the transformation described earlier has \(r_o = r_i\), the two cancel out, and we just need to examine the Jacobian determinant of the transformation itself:

\[\begin{vmatrix} 1 & 0 \\ \frac{df}{dr_i} & 1 \end{vmatrix}\]

which is clearly equal to 1 regardless of \(f\).

Note that the inverse transformation is given by \(-f\), and the identity is given by \(f = 0\). It’s also easy to show that these transformations are associative, so this is a group in the mathematical sense. The functions such that \(f(0) = 0\) or \(f(1) = 0\) form subgroups.

Linear swirl

For these, \(f(r) = k r\) for some constant k. This is what’s usually implemented as “twirl” or “swirl” in graphics software like Photoshop. Somewhat notoriously, an international criminal attempted to disguise an image of himself he posted online by swirling his face, but Interpol recovered the original image by applying a swirl in the opposite direction. (Content warning for mentions of sexual abuse.)

Wiechel swirl

For these, \(f(r) = k \arcsin r\) for some constant k. \(k = -\frac{1}{2}\) gives the transformation from the Lambert azimuthal equal-area projection to the Wiechel projection, and \(k = \frac{1}{2}\) gives the transformation from the Wiechel projection to the Lambert azimuthal equal-area projection.


We’re not limited to monotonic functions for \(f\). These ones use functions of the form \(f(r) = a \sin\left(br\right)\). Look at all of those wiggles!

Angle distortion

None of these are improvements on the Lambert projection, at least in terms of angle distortion. Without getting into a lengthy calculation, notice that other transformations alter the angle at which meridians meet circles of latitude, particularly at the equator where, on the sphere, meridians intersect at right angles. However, it is interesting that we can make the angle distortion as bad as we like, for example by choosing an arbitrary large \(k\).

If you want some area-preserving transformations to make a better map instead of a worse one, I recommend this paper: Daniel “daan” Strebe (2018): A bevy of area-preserving transforms for map projection designers, Cartography and Geographic Information Science, DOI: 10.1080/15230406.2018.1452632.

A Python script to create the figures in this post is located here.

Related Posts